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
AMergePolicy
that reorders documents according to aSorter
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 onIndexWriter.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 idempotentSorter
s so that the order of segments is predictable. For example, usingSortingMergePolicy
withSorter.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.String
SORTER_ID_PROP
Put in thediagnostics
to denote that this segment is sorted.
-
Constructor Summary
Constructors Constructor Description SortingMergePolicy(MergePolicy in, Sorter sorter)
Create a newMergePolicy
that sorts documents withsorter
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description MergePolicy
clone()
void
close()
Release all resources for the policy.MergePolicy.MergeSpecification
findForcedDeletesMerges(SegmentInfos segmentInfos)
Determine what set of merge operations is necessary in order to expunge all deletes from the index.MergePolicy.MergeSpecification
findForcedMerges(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.MergeSpecification
findMerges(MergePolicy.MergeTrigger mergeTrigger, SegmentInfos segmentInfos)
Determine what set of merge operations are now necessary on the index.static boolean
isSorted(AtomicReader reader, Sorter sorter)
Returns true if the given reader is sorted by the given sorter.void
setIndexWriter(IndexWriter writer)
Sets theIndexWriter
to use by this merge policy.java.lang.String
toString()
boolean
useCompoundFile(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 thediagnostics
to denote that this segment is sorted.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SortingMergePolicy
public SortingMergePolicy(MergePolicy in, Sorter sorter)
Create a newMergePolicy
that 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:MergePolicy
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 theIndexWriter
instance so only one thread at a time will call this method.- Specified by:
findMerges
in 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:MergePolicy
Determine what set of merge operations is necessary in order to merge to <= the specified segment count.IndexWriter
calls this when itsIndexWriter.forceMerge(int)
method is called. This call is always synchronized on theIndexWriter
instance so only one thread at a time will call this method.- Specified by:
findForcedMerges
in 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:MergePolicy
Determine what set of merge operations is necessary in order to expunge all deletes from the index.- Specified by:
findForcedDeletesMerges
in classMergePolicy
- Parameters:
segmentInfos
- the total set of segments in the index- Throws:
java.io.IOException
-
clone
public MergePolicy clone()
- Overrides:
clone
in classMergePolicy
-
close
public void close()
Description copied from class:MergePolicy
Release all resources for the policy.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in classMergePolicy
-
useCompoundFile
public boolean useCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment) throws java.io.IOException
Description copied from class:MergePolicy
Returns true if a new segment (regardless of its origin) should use the compound file format. The default implementation returnstrue
iff 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:
useCompoundFile
in classMergePolicy
- Throws:
java.io.IOException
-
setIndexWriter
public void setIndexWriter(IndexWriter writer)
Description copied from class:MergePolicy
Sets theIndexWriter
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.- Overrides:
setIndexWriter
in classMergePolicy
- See Also:
SetOnce
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-