Class BPReorderingMergePolicy

    • Field Detail

      • REORDERED

        static final java.lang.String REORDERED
        Whether a segment has been reordered.
        See Also:
        Constant Field Values
      • minNaturalMergeNumDocs

        private int minNaturalMergeNumDocs
      • minNaturalMergeRatioFromBiggestSegment

        private float minNaturalMergeRatioFromBiggestSegment
    • Constructor Detail

      • BPReorderingMergePolicy

        public BPReorderingMergePolicy​(MergePolicy in,
                                       BPIndexReorderer reorderer)
        Sole constructor. It takes the merge policy that should be used to compute merges, and will then reorder doc IDs from all merges above the configured minimum doc count, as well as all forced merges.

        If you wish to only run reordering upon forced merges, pass Integer.MAX_VALUE as a minNaturalMergeNumDocs. Otherwise a default value of 2^18 = 262,144 is suggested. This should help retain merging optimizations on small merges while reordering the larger segments that are important for good search performance.

        Parameters:
        in - the merge policy to use to compute merges
        reorderer - the BPIndexReorderer to use to renumber doc IDs
    • Method Detail

      • setMinNaturalMergeNumDocs

        public void setMinNaturalMergeNumDocs​(int minNaturalMergeNumDocs)
        Set the minimum number of docs that a merge must have for the resulting segment to be reordered.
      • setMinNaturalMergeRatioFromBiggestSegment

        public void setMinNaturalMergeRatioFromBiggestSegment​(float minNaturalMergeRatioFromBiggestSegment)
        Set the minimum number of docs that a merge must have for the resulting segment to be reordered, as a ratio of the total number of documents of the current biggest segment in the index. This parameter helps only enable reordering on segments that are large enough that they will significantly contribute to overall search performance.
      • findMerges

        public MergePolicy.MergeSpecification findMerges​(MergeTrigger mergeTrigger,
                                                         SegmentInfos segmentInfos,
                                                         MergePolicy.MergeContext mergeContext)
                                                  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.
        Overrides:
        findMerges in class FilterMergePolicy
        Parameters:
        mergeTrigger - the event that triggered the merge
        segmentInfos - the total set of segments in the index
        mergeContext - the IndexWriter to find the merges on
        Throws:
        java.io.IOException
      • findForcedMerges

        public MergePolicy.MergeSpecification findForcedMerges​(SegmentInfos segmentInfos,
                                                               int maxSegmentCount,
                                                               java.util.Map<SegmentCommitInfo,​java.lang.Boolean> segmentsToMerge,
                                                               MergePolicy.MergeContext mergeContext)
                                                        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.
        Overrides:
        findForcedMerges in class FilterMergePolicy
        Parameters:
        segmentInfos - the total set of segments in the index
        maxSegmentCount - requested maximum number of segments in the index
        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.
        mergeContext - the MergeContext to find the merges on
        Throws:
        java.io.IOException
      • findMerges

        public MergePolicy.MergeSpecification findMerges​(CodecReader... readers)
                                                  throws java.io.IOException
        Description copied from class: MergePolicy
        Define the set of merge operations to perform on provided codec readers in IndexWriter.addIndexes(CodecReader...).

        The merge operation is required to convert provided readers into segments that can be added to the writer. This API can be overridden in custom merge policies to control the concurrency for addIndexes. Default implementation creates a single merge operation for all provided readers (lowest concurrency). Creating a merge for each reader, would provide the highest level of concurrency possible with the configured merge scheduler.

        Overrides:
        findMerges in class FilterMergePolicy
        Parameters:
        readers - CodecReader(s) to merge into the main index
        Throws:
        java.io.IOException