Interface IndexSorter

All Known Implementing Classes:
IndexSorter.BinarySorter, IndexSorter.DoubleSorter, IndexSorter.FloatSorter, IndexSorter.IntSorter, IndexSorter.LongSorter, IndexSorter.StringSorter

public interface IndexSorter
Handles how documents should be sorted in an index, both within a segment and between segments.

Implementers must provide the following methods:

The companion SortFieldProvider should be registered with SPI via META-INF/services

  • Method Details

    • getComparableProviders

      default IndexSorter.ComparableProvider[] getComparableProviders(List<? extends LeafReader> readers) throws IOException
      Get an array of IndexSorter.ComparableProvider, one per segment, for merge sorting documents in different segments.

      Implementations whose sort value is a long should implement this method; it is exposed to the merger through the default getComparableValues(List). Implementations that override getComparableValues(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 a IndexSorter.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 a long.

      Parameters:
      readers - the readers to be merged
      Throws:
      IOException
    • getDocComparator

      IndexSorter.DocComparator getDocComparator(LeafReader reader, int maxDoc) throws IOException
      Get a comparator that determines the sort order of docs within a single Reader.

      NB We cannot simply use the FieldComparator API 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 sort
      maxDoc - the number of documents in the Reader
      Throws:
      IOException
    • getProviderName

      String getProviderName()
      The SPI-registered name of a SortFieldProvider that will deserialize the parent SortField