Package org.apache.lucene.index.sorter
Class SortingMergePolicy
- java.lang.Object
-
- org.apache.lucene.index.MergePolicy
-
- org.apache.lucene.index.sorter.SortingMergePolicy
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,java.lang.Cloneable
public final class SortingMergePolicy extends MergePolicy
AMergePolicythat reorders documents according to aSorterbefore merging them. As a consequence, all segments resulting from a merge will be sorted while segments resulting from a flush will be in the order in which documents have been added.NOTE: Never use this
MergePolicyif you rely onIndexWriter.addDocuments(Iterable, org.apache.lucene.analysis.Analyzer)to have sequentially-assigned doc IDs, this policy will scatter doc IDs.NOTE: This
MergePolicyshould only be used with idempotentSorters so that the order of segments is predictable. For example, usingSortingMergePolicywithSorter.REVERSE_DOCS(which is not idempotent) will make the order of documents in a segment depend on the number of times the segment has been merged.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.lucene.index.MergePolicy
MergePolicy.DocMap, MergePolicy.MergeAbortedException, MergePolicy.MergeException, MergePolicy.MergeSpecification, MergePolicy.MergeTrigger, MergePolicy.OneMerge
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringSORTER_ID_PROPPut in thediagnosticsto denote that this segment is sorted.
-
Constructor Summary
Constructors Constructor Description SortingMergePolicy(MergePolicy in, Sorter sorter)Create a newMergePolicythat sorts documents withsorter.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description MergePolicyclone()voidclose()Release all resources for the policy.MergePolicy.MergeSpecificationfindForcedDeletesMerges(SegmentInfos segmentInfos)Determine what set of merge operations is necessary in order to expunge all deletes from the index.MergePolicy.MergeSpecificationfindForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, java.util.Map<SegmentCommitInfo,java.lang.Boolean> segmentsToMerge)Determine what set of merge operations is necessary in order to merge to <= the specified segment count.MergePolicy.MergeSpecificationfindMerges(MergePolicy.MergeTrigger mergeTrigger, SegmentInfos segmentInfos)Determine what set of merge operations are now necessary on the index.static booleanisSorted(AtomicReader reader, Sorter sorter)Returns true if the given reader is sorted by the given sorter.voidsetIndexWriter(IndexWriter writer)Sets theIndexWriterto use by this merge policy.java.lang.StringtoString()booleanuseCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment)Returns true if a new segment (regardless of its origin) should use the compound file format.-
Methods inherited from class org.apache.lucene.index.MergePolicy
getMaxCFSSegmentSizeMB, getNoCFSRatio, setMaxCFSSegmentSizeMB, setNoCFSRatio
-
-
-
-
Field Detail
-
SORTER_ID_PROP
public static final java.lang.String SORTER_ID_PROP
Put in thediagnosticsto denote that this segment is sorted.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SortingMergePolicy
public SortingMergePolicy(MergePolicy in, Sorter sorter)
Create a newMergePolicythat sorts documents withsorter.
-
-
Method Detail
-
isSorted
public static boolean isSorted(AtomicReader reader, Sorter sorter)
Returns true if the given reader is sorted by the given sorter.
-
findMerges
public MergePolicy.MergeSpecification findMerges(MergePolicy.MergeTrigger mergeTrigger, SegmentInfos segmentInfos) throws java.io.IOException
Description copied from class:MergePolicyDetermine what set of merge operations are now necessary on the index.IndexWritercalls this whenever there is a change to the segments. This call is always synchronized on theIndexWriterinstance so only one thread at a time will call this method.- Specified by:
findMergesin classMergePolicy- Parameters:
mergeTrigger- the event that triggered the mergesegmentInfos- the total set of segments in the index- Throws:
java.io.IOException
-
findForcedMerges
public MergePolicy.MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, java.util.Map<SegmentCommitInfo,java.lang.Boolean> segmentsToMerge) throws java.io.IOException
Description copied from class:MergePolicyDetermine what set of merge operations is necessary in order to merge to <= the specified segment count.IndexWritercalls this when itsIndexWriter.forceMerge(int)method is called. This call is always synchronized on theIndexWriterinstance so only one thread at a time will call this method.- Specified by:
findForcedMergesin classMergePolicy- Parameters:
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.- Throws:
java.io.IOException
-
findForcedDeletesMerges
public MergePolicy.MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos) throws java.io.IOException
Description copied from class:MergePolicyDetermine what set of merge operations is necessary in order to expunge all deletes from the index.- Specified by:
findForcedDeletesMergesin classMergePolicy- Parameters:
segmentInfos- the total set of segments in the index- Throws:
java.io.IOException
-
clone
public MergePolicy clone()
- Overrides:
clonein classMergePolicy
-
close
public void close()
Description copied from class:MergePolicyRelease all resources for the policy.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein classMergePolicy
-
useCompoundFile
public boolean useCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) throws java.io.IOException
Description copied from class:MergePolicyReturns true if a new segment (regardless of its origin) should use the compound file format. The default implementation returnstrueiff the size of the given mergedInfo is less or equal toMergePolicy.getMaxCFSSegmentSizeMB()and the size is less or equal to the TotalIndexSize *MergePolicy.getNoCFSRatio()otherwisefalse.- Overrides:
useCompoundFilein classMergePolicy- Throws:
java.io.IOException
-
setIndexWriter
public void setIndexWriter(IndexWriter writer)
Description copied from class:MergePolicySets theIndexWriterto 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.AlreadySetExceptionis thrown.- Overrides:
setIndexWriterin classMergePolicy- See Also:
SetOnce
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-