Class SortingMergePolicy

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Cloneable

    public final class SortingMergePolicy
    extends MergePolicy
    A MergePolicy that reorders documents according to a Sorter before merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added.

    NOTE: Never use this MergePolicy if you rely on IndexWriter.addDocuments(Iterable, org.apache.lucene.analysis.Analyzer) to have sequentially-assigned doc IDs, this policy will scatter doc IDs.

    NOTE: This MergePolicy should only be used with idempotent Sorters so that the order of segments is predictable. For example, using SortingMergePolicy with Sorter.REVERSE_DOCS (which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged.

    • Field Detail

      • SORTER_ID_PROP

        public static final java.lang.String SORTER_ID_PROP
        Put in the diagnostics to denote that this segment is sorted.
        See Also:
        Constant Field Values
    • Constructor Detail

      • SortingMergePolicy

        public SortingMergePolicy​(MergePolicy in,
                                  Sorter sorter)
        Create a new MergePolicy that sorts documents with sorter.
    • Method Detail

      • isSorted

        public static boolean isSorted​(AtomicReader reader,
                                       Sorter sorter)
        Returns true if the given reader is sorted by the given sorter.
      • findMerges

        public MergePolicy.MergeSpecification findMerges​(MergePolicy.MergeTrigger mergeTrigger,
                                                         SegmentInfos segmentInfos)
                                                  throws java.io.IOException
        Description copied from class: MergePolicy
        Determine what set of merge operations are now necessary on the index. IndexWriter calls this whenever there is a change to the segments. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method.
        Specified by:
        findMerges in class MergePolicy
        Parameters:
        mergeTrigger - the event that triggered the merge
        segmentInfos - the total set of segments in the index
        Throws:
        java.io.IOException
      • findForcedMerges

        public MergePolicy.MergeSpecification findForcedMerges​(SegmentInfos segmentInfos,
                                                               int maxSegmentCount,
                                                               java.util.Map<SegmentCommitInfo,​java.lang.Boolean> segmentsToMerge)
                                                        throws java.io.IOException
        Description copied from class: MergePolicy
        Determine what set of merge operations is necessary in order to merge to <= the specified segment count. IndexWriter calls this when its IndexWriter.forceMerge(int) method is called. This call is always synchronized on the IndexWriter instance so only one thread at a time will call this method.
        Specified by:
        findForcedMerges in class MergePolicy
        Parameters:
        segmentInfos - the total set of segments in the index
        maxSegmentCount - requested maximum number of segments in the index (currently this is always 1)
        segmentsToMerge - contains the specific SegmentInfo instances that must be merged away. This may be a subset of all SegmentInfos. If the value is True for a given SegmentInfo, that means this segment was an original segment present in the to-be-merged index; else, it was a segment produced by a cascaded merge.
        Throws:
        java.io.IOException
      • findForcedDeletesMerges

        public MergePolicy.MergeSpecification findForcedDeletesMerges​(SegmentInfos segmentInfos)
                                                               throws java.io.IOException
        Description copied from class: MergePolicy
        Determine what set of merge operations is necessary in order to expunge all deletes from the index.
        Specified by:
        findForcedDeletesMerges in class MergePolicy
        Parameters:
        segmentInfos - the total set of segments in the index
        Throws:
        java.io.IOException
      • close

        public void close()
        Description copied from class: MergePolicy
        Release all resources for the policy.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Specified by:
        close in class MergePolicy
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object