|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.lucene.search.FieldComparator<T>
public abstract class FieldComparator<T>
Expert: a FieldComparator compares hits so as to determine their
sort order when collecting the top results with 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(AtomicReaderContext)
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.
Nested Class Summary | |
---|---|
static class |
FieldComparator.ByteComparator
Parses field's values as byte (using FieldCache.getBytes(org.apache.lucene.index.AtomicReader, java.lang.String, boolean) 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.AtomicReader, java.lang.String, boolean) and sorts by ascending value |
static class |
FieldComparator.FloatComparator
Parses field's values as float (using FieldCache.getFloats(org.apache.lucene.index.AtomicReader, java.lang.String, boolean) and sorts by ascending value |
static class |
FieldComparator.FloatDocValuesComparator
Uses float index values to sort by ascending value |
static class |
FieldComparator.IntComparator
Parses field's values as int (using FieldCache.getInts(org.apache.lucene.index.AtomicReader, java.lang.String, boolean) and sorts by ascending value |
static class |
FieldComparator.IntDocValuesComparator
Loads int index values and sorts by ascending value. |
static class |
FieldComparator.LongComparator
Parses field's values as long (using FieldCache.getLongs(org.apache.lucene.index.AtomicReader, java.lang.String, boolean) and sorts by ascending value |
static class |
FieldComparator.NumericComparator<T extends Number>
Base FieldComparator class for numeric types |
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.AtomicReader, java.lang.String, boolean) and sorts by ascending value |
static class |
FieldComparator.TermOrdValComparator
Sorts by field's natural Term sort order, using ordinals. |
static class |
FieldComparator.TermOrdValDocValuesComparator
Sorts by field's natural Term sort order, using ordinals; this is just like FieldComparator.TermValComparator except it uses DocValues to
retrieve the sort ords saved during indexing. |
static class |
FieldComparator.TermValComparator
Sorts by field's natural Term sort order. |
static class |
FieldComparator.TermValDocValuesComparator
Sorts by field's natural Term sort order. |
Constructor Summary | |
---|---|
FieldComparator()
|
Method Summary | |
---|---|
protected static int |
binarySearch(BytesRef br,
FieldCache.DocTermsIndex a,
BytesRef key)
|
protected static int |
binarySearch(BytesRef br,
FieldCache.DocTermsIndex a,
BytesRef 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. |
abstract int |
compareDocToValue(int doc,
T value)
Returns negative result if the doc's value is less than the provided value. |
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 FieldComparator<T> |
setNextReader(AtomicReaderContext context)
Set a new AtomicReaderContext . |
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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public FieldComparator()
Method Detail |
---|
public abstract int compare(int slot1, int slot2)
slot1
- first slot to compareslot2
- second slot to compare
public 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 hit
IOException
public abstract void copy(int slot, int doc) throws IOException
slot
- which slot to copy the hit todoc
- docID relative to current reader
IOException
public abstract FieldComparator<T> setNextReader(AtomicReaderContext context) throws IOException
AtomicReaderContext
. All subsequent docIDs are relative to
the current reader (you must add docBase if you need to
map it to a top-level docID).
context
- current reader context
IOException
- if there is a low-level IO errorpublic 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 value
public int compareValues(T first, T second)
public abstract int compareDocToValue(int doc, T value) throws IOException
IOException
protected static final int binarySearch(BytesRef br, FieldCache.DocTermsIndex a, BytesRef key)
protected static final int binarySearch(BytesRef br, FieldCache.DocTermsIndex a, BytesRef key, int low, int high)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |