Interface IndexSorter
- All Known Implementing Classes:
IndexSorter.BinarySorter,IndexSorter.DoubleSorter,IndexSorter.FloatSorter,IndexSorter.IntSorter,IndexSorter.LongSorter,IndexSorter.StringSorter
Implementers must provide the following methods:
getDocComparator(LeafReader,int)- an object that determines how documents within a segment are to be sortedgetComparableValues(List)- an object that reads and compares the sort value of documents across segments, used for merge sorting. The default implementation adaptsgetComparableProviders(List), so sorts whose value can be expressed as alongonly need to implement the latter.getProviderName()- the SPI-registered name of aSortFieldProviderto serialize the sort
The companion SortFieldProvider should be registered with SPI via
META-INF/services
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic interfaceProvide a BinaryDocValues instance for a LeafReaderstatic final classSorts documents by the bytes of aBinaryDocValuesinstance, using the given comparator.static interfaceUsed for sorting documents across segmentsstatic interfaceCaches the sort value of the current document of every segment being merged, and compares them.static interfaceA comparator of doc IDs, used for sorting documents within a segmentstatic final classSorts documents based on double values from a NumericDocValues instancestatic final classSorts documents based on float values from a NumericDocValues instancestatic final classSorts documents based on integer values from a NumericDocValues instancestatic final classSorts documents based on long values from a NumericDocValues instancestatic interfaceProvide a NumericDocValues instance for a LeafReaderstatic interfaceProvide a SortedDocValues instance for a LeafReaderstatic final classSorts documents based on terms from a SortedDocValues instance -
Method Summary
Modifier and TypeMethodDescriptiondefault IndexSorter.ComparableProvider[]getComparableProviders(List<? extends LeafReader> readers) Get an array ofIndexSorter.ComparableProvider, one per segment, for merge sorting documents in different segments.default IndexSorter.ComparableValuesgetComparableValues(List<? extends LeafReader> readers) Get aIndexSorter.ComparableValues, used for merge sorting documents across the given segments.getDocComparator(LeafReader reader, int maxDoc) Get a comparator that determines the sort order of docs within a single Reader.The SPI-registered name of aSortFieldProviderthat will deserialize the parent SortField
-
Method Details
-
getComparableProviders
default IndexSorter.ComparableProvider[] getComparableProviders(List<? extends LeafReader> readers) throws IOException Get an array ofIndexSorter.ComparableProvider, one per segment, for merge sorting documents in different segments.Implementations whose sort value is a
longshould implement this method; it is exposed to the merger through the defaultgetComparableValues(List). Implementations that overridegetComparableValues(List)directly need not implement this method.- Parameters:
readers- the readers to be merged- Throws:
IOException
-
getComparableValues
default IndexSorter.ComparableValues getComparableValues(List<? extends LeafReader> readers) throws IOException Get aIndexSorter.ComparableValues, used for merge sorting documents across the given segments.The default implementation adapts
getComparableProviders(List)and is appropriate for any sort whose value can be represented as along.- Parameters:
readers- the readers to be merged- Throws:
IOException
-
getDocComparator
Get a comparator that determines the sort order of docs within a single Reader.NB We cannot simply use the
FieldComparatorAPI because it requires docIDs to be sent in-order. The default implementations allocate array[maxDoc] to hold native values for comparison, but 1) they are transient (only alive while sorting this one segment) and 2) in the typical index sorting case, they are only used to sort newly flushed segments, which will be smaller than merged segments- Parameters:
reader- the Reader to sortmaxDoc- the number of documents in the Reader- Throws:
IOException
-
getProviderName
String getProviderName()The SPI-registered name of aSortFieldProviderthat will deserialize the parent SortField
-