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:
Closeable,AutoCloseable,Cloneable
A
MergePolicy that reorders documents according to a Sorter
before 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 MergePolicy if you rely on
IndexWriter.addDocuments(Iterable, org.apache.lucene.analysis.Analyzer)
to have sequentially-assigned doc IDs, this policy will scatter doc IDs.
NOTE: This MergePolicy should only be used with idempotent
Sorters so that the order of segments is predictable. For example,
using SortingMergePolicy with Sorter.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
FieldsModifier and TypeFieldDescriptionstatic final StringPut in thediagnosticsto denote that this segment is sorted. -
Constructor Summary
ConstructorsConstructorDescriptionSortingMergePolicy(MergePolicy in, Sorter sorter) Create a newMergePolicythat sorts documents withsorter. -
Method Summary
Modifier and TypeMethodDescriptionclone()voidclose()Release all resources for the policy.findForcedDeletesMerges(SegmentInfos segmentInfos) Determine what set of merge operations is necessary in order to expunge all deletes from the index.findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, Map<SegmentCommitInfo, Boolean> segmentsToMerge) Determine what set of merge operations is necessary in order to merge to invalid input: '<'= the specified segment count.findMerges(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.toString()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 Details
-
SORTER_ID_PROP
Put in thediagnosticsto denote that this segment is sorted.- See Also:
-
-
Constructor Details
-
SortingMergePolicy
Create a newMergePolicythat sorts documents withsorter.
-
-
Method Details
-
isSorted
Returns true if the given reader is sorted by the given sorter. -
findMerges
public MergePolicy.MergeSpecification findMerges(MergePolicy.MergeTrigger mergeTrigger, SegmentInfos segmentInfos) throws 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:
IOException
-
findForcedMerges
public MergePolicy.MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount, Map<SegmentCommitInfo, Boolean> segmentsToMerge) throws IOExceptionDescription copied from class:MergePolicyDetermine what set of merge operations is necessary in order to merge to invalid input: '<'= 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:
IOException
-
findForcedDeletesMerges
public MergePolicy.MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos) throws 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:
IOException
-
clone
- Overrides:
clonein classMergePolicy
-
close
public void close()Description copied from class:MergePolicyRelease all resources for the policy.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein classMergePolicy
-
useCompoundFile
public boolean useCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) throws 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:
IOException
-
setIndexWriter
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:
-
toString
-