package io.searchbox.indices;
import io.searchbox.action.AbstractMultiIndexActionBuilder;
import io.searchbox.action.GenericResultAbstractAction;
/**
* Force-merge API: https://www.elastic.co/guide/en/elasticsearch/reference/2.4/indices-forcemerge.html
*
* Caution: this API has been introduced in ES 2.1. With earlier versions, use {@link Optimize}.
*
* @author Dogukan Sonmez
* @author cihat keser
* @author Yoann Rodiere
*/
public class ForceMerge extends GenericResultAbstractAction {
protected ForceMerge(Builder builder) {
super(builder);
setURI(buildURI());
}
@Override
public String getRestMethodName() {
return "POST";
}
@Override
protected String buildURI() {
return super.buildURI() + "/_forcemerge";
}
public static class Builder extends AbstractMultiIndexActionBuilder<ForceMerge, Builder> {
/**
* The number of segments to merge to. To fully merge the index, set it to 1.
* Defaults to simply checking if a merge needs to execute, and if so, executes it.
*/
public Builder maxNumSegments(Number maxNumSegments) {
return setParameter("max_num_segments", maxNumSegments);
}
/**
* Should the merge process only expunge segments with deletes in it. In Lucene,
* a document is not deleted from a segment, just marked as deleted. During a merge
* process of segments, a new segment is created that does not have those deletes.
* This flag allow to only merge segments that have deletes. Defaults to false.
*/
public Builder onlyExpungeDeletes(boolean onlyExpungeDeletes) {
return setParameter("only_expunge_deletes", onlyExpungeDeletes);
}
/**
* Should a flush be performed after the forced merge. Defaults to true.
*/
public Builder flush(boolean flush) {
return setParameter("flush", flush);
}
@Override
public ForceMerge build() {
return new ForceMerge(this);
}
}
}