public abstract class FieldComparator<T> extends Object
TopFieldCollector
. The concrete public FieldComparator
classes here correspond to the SortField types.
This API is designed to achieve high performance
sorting, by exposing a tight interaction with FieldValueHitQueue
as it visits hits. Whenever a hit is
competitive, it's enrolled into a virtual slot, which is
an int ranging from 0 to numHits-1. The FieldComparator
is made aware of segment transitions
during searching in case any internal state it's tracking
needs to be recomputed during these transitions.
A comparator must define these functions:
compare(int, int)
Compare a hit at 'slot a'
with hit 'slot b'.
setBottom(int)
This method is called by
FieldValueHitQueue
to notify the
FieldComparator of the current weakest ("bottom")
slot. Note that this slot may not hold the weakest
value according to your comparator, in cases where
your comparator is not the primary one (ie, is only
used to break ties from the comparators before it).
compareBottom(int)
Compare a new hit (docID)
against the "weakest" (bottom) entry in the queue.
copy(int, int)
Installs a new hit into the
priority queue. The FieldValueHitQueue
calls this method when a new hit is competitive.
setNextReader(org.apache.lucene.index.IndexReader, int)
Invoked
when the search is switching to the next segment.
You may need to update internal state of the
comparator, for example retrieving new values from
the FieldCache
.
value(int)
Return the sort value stored in
the specified slot. This is only called at the end
of the search, in order to populate FieldDoc.fields
when returning the top results.
Modifier and Type | Class and Description |
---|---|
static class |
FieldComparator.ByteComparator
Parses field's values as byte (using
FieldCache.getBytes(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.DocComparator
Sorts by ascending docID
|
static class |
FieldComparator.DoubleComparator
Parses field's values as double (using
FieldCache.getDoubles(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.FloatComparator
Parses field's values as float (using
FieldCache.getFloats(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.IntComparator
Parses field's values as int (using
FieldCache.getInts(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.LongComparator
Parses field's values as long (using
FieldCache.getLongs(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.NumericComparator<T extends Number> |
static class |
FieldComparator.RelevanceComparator
Sorts by descending relevance.
|
static class |
FieldComparator.ShortComparator
Parses field's values as short (using
FieldCache.getShorts(org.apache.lucene.index.IndexReader, java.lang.String) and sorts by ascending value |
static class |
FieldComparator.StringComparatorLocale
Sorts by a field's value using the Collator for a
given Locale.
|
static class |
FieldComparator.StringOrdValComparator
Sorts by field's natural String sort order, using
ordinals.
|
static class |
FieldComparator.StringValComparator
Sorts by field's natural String sort order.
|
Constructor and Description |
---|
FieldComparator() |
Modifier and Type | Method and Description |
---|---|
protected static int |
binarySearch(String[] a,
String key) |
protected static int |
binarySearch(String[] a,
String key,
int low,
int high) |
abstract int |
compare(int slot1,
int slot2)
Compare hit at slot1 with hit at slot2.
|
abstract int |
compareBottom(int doc)
Compare the bottom of the queue with doc.
|
int |
compareValues(T first,
T second)
Returns -1 if first is less than second.
|
abstract void |
copy(int slot,
int doc)
This method is called when a new hit is competitive.
|
abstract void |
setBottom(int slot)
Set the bottom slot, ie the "weakest" (sorted last)
entry in the queue.
|
abstract void |
setNextReader(IndexReader reader,
int docBase)
Set a new Reader.
|
void |
setScorer(Scorer scorer)
Sets the Scorer to use in case a document's score is
needed.
|
abstract T |
value(int slot)
Return the actual value in the slot.
|
public abstract int compare(int slot1, int slot2)
slot1
- first slot to compareslot2
- second slot to comparepublic abstract void setBottom(int slot)
compareBottom(int)
is
called, you should compare against this slot. This
will always be called before compareBottom(int)
.slot
- the currently weakest (sorted last) slot in the queuepublic abstract int compareBottom(int doc) throws IOException
compare(int,int)
} as if bottom were slot1 and the new
document were slot 2.
For a search that hits many results, this method will be the hotspot (invoked by far the most frequently).
doc
- that was hitIOException
public abstract void copy(int slot, int doc) throws IOException
slot
- which slot to copy the hit todoc
- docID relative to current readerIOException
public abstract void setNextReader(IndexReader reader, int docBase) throws IOException
reader
- current readerdocBase
- docBase of this readerIOException
IOException
public void setScorer(Scorer scorer)
scorer
- Scorer instance that you should use to
obtain the current hit's score, if necessary.public abstract T value(int slot)
slot
- the valuepublic int compareValues(T first, T second)