Expert: a MergePolicy determines the sequence of primitive merge operations to be used for overall merge and optimize operations.
Whenever the segments in an index have been altered by {@link 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, {@link IndexWriter} invokes {@link #findMerges} to give the MergePolicy a chance to pickmerges that are now required. This method returns a {@link MergeSpecification} instance describing the set ofmerges that should be done, or null if no merges are necessary. When IndexWriter.optimize is called, it calls {@link #findMergesForOptimize} and the MergePolicy shouldthen 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 {@link SerialMergeScheduler}, the merges will be run sequentially but if it is using {@link ConcurrentMergeScheduler} they will be run concurrently.
The default MergePolicy is {@link LogByteSizeMergePolicy}.
NOTE: This API is new and still experimental (subject to change suddenly in the next release)
NOTE: This class typically requires access to package-private APIs (e.g. SegmentInfos
) to do its job; if you implement your own MergePolicy, you'll need to put it in package org.apache.lucene.index in order to use these APIs.