public static class FieldComparator.TermOrdValComparator extends FieldComparator<BytesRef> implements LeafFieldComparator
FieldComparator.TermValComparator
, but it first resolves the string
to their relative ordinal positions (using the index
returned by LeafReader.getSortedDocValues(String)
), and
does most comparisons using the ordinals. For medium
to large results, this comparator will be much faster
than FieldComparator.TermValComparator
. For very small
result sets it may be slower.FieldComparator.DocComparator, FieldComparator.DoubleComparator, FieldComparator.FloatComparator, FieldComparator.IntComparator, FieldComparator.LongComparator, FieldComparator.NumericComparator<T extends java.lang.Number>, FieldComparator.RelevanceComparator, FieldComparator.TermOrdValComparator, FieldComparator.TermValComparator
Modifier and Type | Field and Description |
---|---|
(package private) int |
bottomOrd |
(package private) boolean |
bottomSameReader |
(package private) int |
bottomSlot |
(package private) BytesRef |
bottomValue |
(package private) int |
currentReaderGen |
private java.lang.String |
field |
(package private) int |
missingOrd
Which ordinal to use for a missing value.
|
(package private) int |
missingSortCmp
-1 if missing values are sorted first, 1 if they are
sorted last
|
(package private) int[] |
ords |
(package private) int[] |
readerGen |
private BytesRefBuilder[] |
tempBRs |
(package private) SortedDocValues |
termsIndex |
(package private) int |
topOrd |
(package private) boolean |
topSameReader |
(package private) BytesRef |
topValue
Set by setTopValue.
|
(package private) BytesRef[] |
values |
Constructor and Description |
---|
TermOrdValComparator(int numHits,
java.lang.String field)
Creates this, sorting missing values first.
|
TermOrdValComparator(int numHits,
java.lang.String field,
boolean sortMissingLast)
Creates this, with control over how missing values
are sorted.
|
Modifier and Type | Method and Description |
---|---|
int |
compare(int slot1,
int slot2)
Compare hit at slot1 with hit at slot2.
|
int |
compareBottom(int doc)
Compare the bottom of the queue with this doc.
|
int |
compareTop(int doc)
Compare the top value with this doc.
|
int |
compareValues(BytesRef val1,
BytesRef val2)
Returns a negative integer if first is less than second,
0 if they are equal and a positive integer otherwise.
|
void |
copy(int slot,
int doc)
This method is called when a new hit is competitive.
|
LeafFieldComparator |
getLeafComparator(LeafReaderContext context)
Get a per-segment
LeafFieldComparator to collect the given
LeafReaderContext . |
private int |
getOrdForDoc(int doc) |
protected SortedDocValues |
getSortedDocValues(LeafReaderContext context,
java.lang.String field)
Retrieves the SortedDocValues for the field in this segment
|
void |
setBottom(int bottom)
Set the bottom slot, ie the "weakest" (sorted last)
entry in the queue.
|
void |
setScorer(Scorable scorer)
Sets the Scorer to use in case a document's score is
needed.
|
void |
setTopValue(BytesRef value)
Record the top value, for future calls to
LeafFieldComparator.compareTop(int) . |
BytesRef |
value(int slot)
Return the actual value in the slot.
|
final int[] ords
final BytesRef[] values
private final BytesRefBuilder[] tempBRs
final int[] readerGen
int currentReaderGen
SortedDocValues termsIndex
private final java.lang.String field
int bottomSlot
int bottomOrd
boolean bottomSameReader
BytesRef bottomValue
BytesRef topValue
boolean topSameReader
int topOrd
final int missingSortCmp
final int missingOrd
public TermOrdValComparator(int numHits, java.lang.String field)
public TermOrdValComparator(int numHits, java.lang.String field, boolean sortMissingLast)
private int getOrdForDoc(int doc) throws java.io.IOException
java.io.IOException
public int compare(int slot1, int slot2)
FieldComparator
compare
in class FieldComparator<BytesRef>
slot1
- first slot to compareslot2
- second slot to compareN < 0
if slot2's value is sorted after
slot1, any N > 0
if the slot2's value is sorted before
slot1 and 0
if they are equalpublic int compareBottom(int doc) throws java.io.IOException
LeafFieldComparator
FieldComparator.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).
compareBottom
in interface LeafFieldComparator
doc
- that was hitN < 0
if the doc's value is sorted after
the bottom entry (not competitive), any N > 0
if the
doc's value is sorted before the bottom entry and 0
if
they are equal.java.io.IOException
public void copy(int slot, int doc) throws java.io.IOException
LeafFieldComparator
copy
in interface LeafFieldComparator
slot
- which slot to copy the hit todoc
- docID relative to current readerjava.io.IOException
protected SortedDocValues getSortedDocValues(LeafReaderContext context, java.lang.String field) throws java.io.IOException
java.io.IOException
public LeafFieldComparator getLeafComparator(LeafReaderContext context) throws java.io.IOException
FieldComparator
LeafFieldComparator
to collect the given
LeafReaderContext
. All docIDs supplied to
this LeafFieldComparator
are relative to the current reader (you
must add docBase if you need to map it to a top-level docID).getLeafComparator
in class FieldComparator<BytesRef>
context
- current reader contextjava.io.IOException
- if there is a low-level IO errorpublic void setBottom(int bottom) throws java.io.IOException
LeafFieldComparator
LeafFieldComparator.compareBottom(int)
is
called, you should compare against this slot. This
will always be called before LeafFieldComparator.compareBottom(int)
.setBottom
in interface LeafFieldComparator
bottom
- the currently weakest (sorted last) slot in the queuejava.io.IOException
public void setTopValue(BytesRef value)
FieldComparator
LeafFieldComparator.compareTop(int)
. This is only called for searches that
use searchAfter (deep paging), and is called before any
calls to FieldComparator.getLeafComparator(LeafReaderContext)
.setTopValue
in class FieldComparator<BytesRef>
public BytesRef value(int slot)
FieldComparator
value
in class FieldComparator<BytesRef>
slot
- the valuepublic int compareTop(int doc) throws java.io.IOException
LeafFieldComparator
FieldComparator.compare(int,int)
} as if topValue were slot1 and the new
document were slot 2. This is only called for searches that
use searchAfter (deep paging).compareTop
in interface LeafFieldComparator
doc
- that was hitN < 0
if the doc's value is sorted after
the top entry (not competitive), any N > 0
if the
doc's value is sorted before the top entry and 0
if
they are equal.java.io.IOException
public int compareValues(BytesRef val1, BytesRef val2)
FieldComparator
compareValues
in class FieldComparator<BytesRef>
public void setScorer(Scorable scorer)
LeafFieldComparator
setScorer
in interface LeafFieldComparator
scorer
- Scorer instance that you should use to
obtain the current hit's score, if necessary.