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(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.
Modifier and Type | Class and Description |
---|---|
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 and Description |
---|
FieldComparator() |
Modifier and Type | Method and Description |
---|---|
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.
|
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 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 contextIOException
- 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 valuepublic 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)
Copyright © 2000-2012 Apache Software Foundation. All Rights Reserved.