org.apache.lucene.index

## Class MergePolicy

- java.lang.Object
- - org.apache.lucene.index.MergePolicy

- All Implemented Interfaces:
    Closeable, AutoCloseable, Cloneable
  Direct Known Subclasses:
    LogMergePolicy, NoMergePolicy, TieredMergePolicy, UpgradeIndexMergePolicy

      public abstract class MergePolicy
      extends Object
      implements Closeable, Cloneable

  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.MergePolicy.MergeTrigger, 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`.

  WARNING: This API is experimental and might change in incompatible ways in the next release.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `MergePolicy.MergeAbortedException` Thrown when a merge was explicity aborted because `IndexWriter.close(boolean)` was called with `false`.
    `static class` | `MergePolicy.MergeException` Exception thrown if there are any problems while executing a merge.
    `static class` | `MergePolicy.MergeSpecification` A MergeSpecification instance provides the information necessary to perform multiple merges.
    `static class` | `MergePolicy.MergeTrigger` MergeTrigger is passed to `findMerges(MergeTrigger, SegmentInfos)` to indicate the event that triggered the merge.
    `static class` | `MergePolicy.OneMerge` OneMerge provides the information necessary to perform an individual primitive merge operation, resulting in a single new segment.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected SetOnce<IndexWriter>` | `writer` `IndexWriter` that contains this instance.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MergePolicy()` Creates a new merge policy instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `MergePolicy` | `clone()`
    `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<SegmentInfoPerCommit,Boolean> segmentsToMerge)` Determine what set of merge operations is necessary in order to merge to <= the specified segment count.
    `abstract MergePolicy.MergeSpecification` | `findMerges(MergePolicy.MergeTrigger mergeTrigger, SegmentInfos segmentInfos)` Determine what set of merge operations are now necessary on the index.
    `void` | `setIndexWriter(IndexWriter writer)` Sets the `IndexWriter` to use by this merge policy.
    `abstract boolean` | `useCompoundFile(SegmentInfos segments, SegmentInfoPerCommit newSegment)` Returns true if a new segment (regardless of its origin) should use the compound file format.

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### writer

          protected SetOnce<IndexWriter> writer

      `IndexWriter` that contains this instance.

  - ### Constructor Detail

    - #### MergePolicy

          public MergePolicy()

      Creates a new merge policy instance. Note that if you intend to use it without passing it to `IndexWriter`, you should call `setIndexWriter(IndexWriter)`.

  - ### Method Detail

    - #### clone

          public MergePolicy clone()

      Overrides:
        `clone` in class `Object`

    - #### setIndexWriter

          public void setIndexWriter(IndexWriter writer)

      Sets the `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.
      See Also:
        `SetOnce`

    - #### findMerges

          public abstract MergePolicy.MergeSpecification findMerges(MergePolicy.MergeTrigger mergeTrigger,
                                                  SegmentInfos segmentInfos)
                                                             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
      Throws:
        `IOException`

    - #### findForcedMerges

          public abstract MergePolicy.MergeSpecification findForcedMerges(SegmentInfos segmentInfos,
                                                        int maxSegmentCount,
                                                        Map<SegmentInfoPerCommit,Boolean> segmentsToMerge)
                                                                   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.
      Throws:
        `IOException`

    - #### findForcedDeletesMerges

          public abstract MergePolicy.MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos)
                                                                          throws IOException

      Determine what set of merge operations is necessary in order to expunge all deletes from the index.
      Parameters:
        `segmentInfos` - the total set of segments in the index
      Throws:
        `IOException`

    - #### close

          public abstract void close()

      Release all resources for the policy.
      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`

    - #### useCompoundFile

          public abstract boolean useCompoundFile(SegmentInfos segments,
                                SegmentInfoPerCommit newSegment)
                                           throws IOException

      Returns true if a new segment (regardless of its origin) should use the compound file format.
      Throws:
        `IOException`

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.