public abstract class MergePolicy extends Object implements Closeable
Expert: a MergePolicy determines the sequence of primitive merge operations.
Whenever the segments in an index have been altered by
 IndexWriter, either the addition of a newly
 flushed segment, addition of many segments from
 addIndexes* calls, or a previous merge that may now need
 to cascade, IndexWriter invokes findMerges(org.apache.lucene.index.SegmentInfos) to give the MergePolicy a chance to pick
 merges that are now required.  This method returns a
 MergePolicy.MergeSpecification instance describing the set of
 merges that should be done, or null if no merges are
 necessary.  When IndexWriter.forceMerge is called, it calls
 findForcedMerges(SegmentInfos,int,Map) and the MergePolicy should
 then return the necessary merges.
Note that the policy can return more than one merge at
 a time.  In this case, if the writer is using SerialMergeScheduler, the merges will be run
 sequentially but if it is using ConcurrentMergeScheduler they will be run concurrently.
The default MergePolicy is TieredMergePolicy.
| Modifier and Type | Class and Description | 
|---|---|
| static class  | MergePolicy.MergeAbortedException | 
| static class  | MergePolicy.MergeExceptionException thrown if there are any problems while
  executing a merge. | 
| static class  | MergePolicy.MergeSpecificationA MergeSpecification instance provides the information
 necessary to perform multiple merges. | 
| static class  | MergePolicy.OneMergeOneMerge provides the information necessary to perform
  an individual primitive merge operation, resulting in
  a single new segment. | 
| Modifier and Type | Field and Description | 
|---|---|
| protected SetOnce<IndexWriter> | writer | 
| Constructor and Description | 
|---|
| MergePolicy()Creates a new merge policy instance. | 
| Modifier and Type | Method and Description | 
|---|---|
| abstract void | close()Release all resources for the policy. | 
| abstract MergePolicy.MergeSpecification | findForcedDeletesMerges(SegmentInfos segmentInfos)Determine what set of merge operations is necessary in order to expunge all
 deletes from the index. | 
| abstract MergePolicy.MergeSpecification | findForcedMerges(SegmentInfos segmentInfos,
                int maxSegmentCount,
                Map<SegmentInfo,Boolean> segmentsToMerge)Determine what set of merge operations is necessary in
 order to merge to <= the specified segment count. | 
| abstract MergePolicy.MergeSpecification | findMerges(SegmentInfos segmentInfos)Determine what set of merge operations are now necessary on the index. | 
| void | setIndexWriter(IndexWriter writer)Sets the  IndexWriterto use by this merge policy. | 
| abstract boolean | useCompoundFile(SegmentInfos segments,
               SegmentInfo newSegment)Returns true if a new segment (regardless of its origin) should use the compound file format. | 
protected final SetOnce<IndexWriter> writer
public MergePolicy()
IndexWriter, you should call
 setIndexWriter(IndexWriter).public void setIndexWriter(IndexWriter writer)
IndexWriter to use by this merge policy. This method is
 allowed to be called only once, and is usually set by IndexWriter. If it is
 called more than once, SetOnce.AlreadySetException is thrown.SetOncepublic abstract MergePolicy.MergeSpecification findMerges(SegmentInfos segmentInfos) throws CorruptIndexException, IOException
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.segmentInfos - the total set of segments in the indexCorruptIndexExceptionIOExceptionpublic abstract MergePolicy.MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, Map<SegmentInfo,Boolean> segmentsToMerge) throws CorruptIndexException, IOException
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.segmentInfos - the total set of segments in the indexmaxSegmentCount - 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.CorruptIndexExceptionIOExceptionpublic abstract MergePolicy.MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos) throws CorruptIndexException, IOException
segmentInfos - the total set of segments in the indexCorruptIndexExceptionIOExceptionpublic abstract void close()
public abstract boolean useCompoundFile(SegmentInfos segments, SegmentInfo newSegment) throws IOException
IOException