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. Segment transitions are
handled by creating a dedicated per-segment
LeafFieldComparator
which also needs to interact
with the FieldValueHitQueue
but can optimize based
on the segment to collect.
The following functions need to be implemented
compare(int, int)
Compare a hit at 'slot a'
with hit 'slot b'.
setTopValue(T)
This method is called by
TopFieldCollector
to notify the
FieldComparator of the top most value, which is
used by future calls to
LeafFieldComparator.compareTop(int)
.
getLeafComparator(org.apache.lucene.index.LeafReaderContext)
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
DocValues.
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.
LeafFieldComparator
Modifier and Type | Class and Description |
---|---|
static class |
FieldComparator.DocComparator
Sorts by ascending docID
|
static class |
FieldComparator.DoubleComparator
Parses field's values as double (using
LeafReader.getNumericDocValues(java.lang.String) and sorts by ascending value |
static class |
FieldComparator.FloatComparator
Parses field's values as float (using
LeafReader.getNumericDocValues(String) and sorts by ascending value |
static class |
FieldComparator.IntComparator
Parses field's values as int (using
LeafReader.getNumericDocValues(String) and sorts by ascending value |
static class |
FieldComparator.LongComparator
Parses field's values as long (using
LeafReader.getNumericDocValues(String) 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.TermOrdValComparator
Sorts by field's natural Term sort order, using
ordinals.
|
static class |
FieldComparator.TermValComparator
Sorts by field's natural Term sort order.
|
Constructor and Description |
---|
FieldComparator() |
Modifier and Type | Method and Description |
---|---|
abstract int |
compare(int slot1,
int slot2)
Compare hit at slot1 with hit at slot2.
|
int |
compareValues(T first,
T second)
Returns a negative integer if first is less than second,
0 if they are equal and a positive integer otherwise.
|
abstract LeafFieldComparator |
getLeafComparator(LeafReaderContext context)
Get a per-segment
LeafFieldComparator to collect the given
LeafReaderContext . |
abstract void |
setTopValue(T value)
Record the top value, for future calls to
LeafFieldComparator.compareTop(int) . |
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 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 abstract void setTopValue(T value)
LeafFieldComparator.compareTop(int)
. This is only called for searches that
use searchAfter (deep paging), and is called before any
calls to getLeafComparator(LeafReaderContext)
.public abstract T value(int slot)
slot
- the valuepublic abstract LeafFieldComparator getLeafComparator(LeafReaderContext context) throws IOException
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).context
- current reader contextIOException
- if there is a low-level IO errorpublic int compareValues(T first, T second)
Copyright © 2000-2017 Apache Software Foundation. All Rights Reserved.