public class BalancedSegmentMergePolicy extends LogByteSizeMergePolicy
This is based on code from zoie, described in more detail at http://code.google.com/p/zoie/wiki/ZoieMergePolicy.
Modifier and Type | Class and Description |
---|---|
static class |
BalancedSegmentMergePolicy.MergePolicyParams
Specifies configuration parameters for BalancedSegmentMergePolicy.
|
MergePolicy.MergeAbortedException, MergePolicy.MergeException, MergePolicy.MergeSpecification, MergePolicy.OneMerge
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_NUM_LARGE_SEGMENTS |
DEFAULT_MAX_MERGE_MB, DEFAULT_MAX_MERGE_MB_FOR_FORCED_MERGE, DEFAULT_MIN_MERGE_MB
calibrateSizeByDeletes, DEFAULT_MAX_MERGE_DOCS, DEFAULT_MERGE_FACTOR, DEFAULT_NO_CFS_RATIO, LEVEL_LOG_SPAN, maxMergeDocs, maxMergeSize, maxMergeSizeForForcedMerge, mergeFactor, minMergeSize, noCFSRatio, useCompoundFile
writer
Constructor and Description |
---|
BalancedSegmentMergePolicy() |
Modifier and Type | Method and Description |
---|---|
MergePolicy.MergeSpecification |
findForcedDeletesMerges(SegmentInfos infos)
Finds merges necessary to force-merge all deletes from the
index.
|
MergePolicy.MergeSpecification |
findForcedMerges(SegmentInfos infos,
int maxNumSegments,
Map<SegmentInfo,Boolean> segmentsToMerge)
Returns the merges necessary to merge the index down
to a specified number of segments.
|
MergePolicy.MergeSpecification |
findMerges(SegmentInfos infos)
Checks if any merges are now necessary and returns a
MergePolicy.MergeSpecification if so. |
int |
getMaxSmallSegments() |
int |
getNumLargeSegments() |
boolean |
getPartialExpunge() |
void |
setMaxSmallSegments(int maxSmallSegments) |
void |
setMergeFactor(int mergeFactor)
Determines how often segment indices are merged by
addDocument().
|
void |
setMergePolicyParams(BalancedSegmentMergePolicy.MergePolicyParams params) |
void |
setNumLargeSegments(int numLargeSegments) |
void |
setPartialExpunge(boolean doPartialExpunge) |
protected long |
size(SegmentInfo info) |
getMaxMergeMB, getMaxMergeMBForForcedMerge, getMaxMergeMBForOptimize, getMinMergeMB, setMaxMergeMB, setMaxMergeMBForForcedMerge, setMaxMergeMBForOptimize, setMinMergeMB
close, getCalibrateSizeByDeletes, getMaxMergeDocs, getMergeFactor, getNoCFSRatio, getUseCompoundFile, isMerged, isMerged, message, setCalibrateSizeByDeletes, setMaxMergeDocs, setNoCFSRatio, setUseCompoundFile, sizeBytes, sizeDocs, toString, useCompoundFile, verbose
setIndexWriter
public static final int DEFAULT_NUM_LARGE_SEGMENTS
public void setMergePolicyParams(BalancedSegmentMergePolicy.MergePolicyParams params)
protected long size(SegmentInfo info) throws IOException
size
in class LogByteSizeMergePolicy
IOException
public void setPartialExpunge(boolean doPartialExpunge)
public boolean getPartialExpunge()
public void setNumLargeSegments(int numLargeSegments)
public int getNumLargeSegments()
public void setMaxSmallSegments(int maxSmallSegments)
public int getMaxSmallSegments()
public void setMergeFactor(int mergeFactor)
LogMergePolicy
setMergeFactor
in class LogMergePolicy
public MergePolicy.MergeSpecification findForcedMerges(SegmentInfos infos, int maxNumSegments, Map<SegmentInfo,Boolean> segmentsToMerge) throws IOException
LogMergePolicy
LogMergePolicy.maxMergeSizeForForcedMerge
setting.
By default, and assuming maxNumSegments=1
, only
one segment will be left in the index, where that segment
has no deletions pending nor separate norms, and it is in
compound file format if the current useCompoundFile
setting is true. This method returns multiple merges
(mergeFactor at a time) so the MergeScheduler
in use may make use of concurrency.findForcedMerges
in class LogMergePolicy
infos
- the total set of segments in the indexmaxNumSegments
- 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.IOException
public MergePolicy.MergeSpecification findForcedDeletesMerges(SegmentInfos infos) throws CorruptIndexException, IOException
LogMergePolicy
findForcedDeletesMerges
in class LogMergePolicy
infos
- the total set of segments in the indexCorruptIndexException
IOException
public MergePolicy.MergeSpecification findMerges(SegmentInfos infos) throws IOException
LogMergePolicy
MergePolicy.MergeSpecification
if so. A merge
is necessary when there are more than LogMergePolicy.setMergeFactor(int)
segments at a given level. When
multiple levels have too many segments, this method
will return multiple merges, allowing the MergeScheduler
to use concurrency.findMerges
in class LogMergePolicy
infos
- the total set of segments in the indexIOException