org.apache.lucene.index

Class MergePolicy

    • Field Detail

      • noCFSRatio

        protected double noCFSRatio
        If the size of the merge segment exceeds this ratio of the total index size then it will remain in non-compound format
      • maxCFSSegmentSize

        protected long maxCFSSegmentSize
        If the size of the merged segment exceeds this value then it will not use compound file format.
    • Constructor Detail

      • MergePolicy

        public MergePolicy()
        Creates a new merge policy instance.
      • MergePolicy

        protected MergePolicy(double defaultNoCFSRatio,
                              long defaultMaxCFSSegmentSize)
        Creates a new merge policy instance with default settings for noCFSRatio and maxCFSSegmentSize. This ctor should be used by subclasses using different defaults than the MergePolicy
    • Method Detail

      • findMerges

        public abstract MergePolicy.MergeSpecification findMerges(MergeTrigger mergeTrigger,
                                                                  SegmentInfos segmentInfos,
                                                                  IndexWriter writer)
                                                           throws IOException
        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.
        Parameters:
        mergeTrigger - the event that triggered the merge
        segmentInfos - the total set of segments in the index
        writer - the IndexWriter to find the merges on
        Throws:
        IOException
      • findForcedMerges

        public abstract MergePolicy.MergeSpecification findForcedMerges(SegmentInfos segmentInfos,
                                                                        int maxSegmentCount,
                                                                        Map<SegmentCommitInfo,Boolean> segmentsToMerge,
                                                                        IndexWriter writer)
                                                                 throws IOException
        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.
        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.
        writer - the IndexWriter to find the merges on
        Throws:
        IOException
      • setNoCFSRatio

        public void setNoCFSRatio(double noCFSRatio)
        If a merged segment will be more than this percentage of the total size of the index, leave the segment as non-compound file even if compound file is enabled. Set to 1.0 to always use CFS regardless of merge size.
      • getMaxCFSSegmentSizeMB

        public final double getMaxCFSSegmentSizeMB()
        Returns the largest size allowed for a compound file segment
      • setMaxCFSSegmentSizeMB

        public void setMaxCFSSegmentSizeMB(double v)
        If a merged segment will be more than this value, leave the segment as non-compound file even if compound file is enabled. Set this to Double.POSITIVE_INFINITY (default) and noCFSRatio to 1.0 to always use CFS regardless of merge size.