合并请求可以控制一个或者多个索引执行合并操作,如果要对所有索引执行,值需要传空数组或者null给 ForceMergeRequest,如
new ForceMergeRequest(null);maxNumSegments用来控制索引合并时保留最多的segment数,如果不设置,那只是简单的触发合并线程,检测是否需要合并,如果需要就执行合并操作,如果不需要,则停止。
elasticsearch 1.5.2的segments合并api
/**
* <pre>
* 索引优化方法
* optimize API允许通过API优化一个或多个索引。
* 优化过程的操作可以优化索引搜索速度<br>
* (涉及到Lucene索引内保存每个碎片的段数)。
* 优化操作合并Lucene段数和物理删除带删除标记的记录。
* @param indexName 优化索引名
* @return 是否优化成功,false:失败 true:成功
* <pre>
*/
public boolean indexOptimize(String indexName ) {
logger.info("ES索引开始优化,索引名为:"+indexName);
Client client = getClient();
try {
OptimizeResponse response = client.admin().indices().optimize(
new OptimizeRequest(indexName)
//合并段数量
.maxNumSegments(1)
//优化过程中是否只合并带删除标记的段,默认为false
.onlyExpungeDeletes(false)
.listenerThreaded(true)
//合并完成后是否执行flush操作,默认为true
.flush(true)
).actionGet();
if(response.getShardFailures().length == response.getTotalShards()){
logger.info("ES索引优化失败"+response.getShardFailures());
return false;
}else if(response.getShardFailures().length>0){
logger.info("ES索引优化部分分片失败"+response.getShardFailures());
}
logger.info("ES索引优化成功");
return true;
}catch (Exception e) {
logger.error("ES优化失败", e);
return false;
}
}
5.0之的优化合并api是:
/**
* <pre>
* 索引优化方法
* optimize API允许通过API优化1个或多个索引
* 优化过程的操作可以优化索引搜索速度<br>
* (涉及到Lucene索引内保存每个碎片的段数)
* 优化操作合并Lucene段数和物理删除带删除标记的记录
* @param indexName 优化索引名
* @return 是否优化成功,false:失败 true:成功
* <pre>
*/
public boolean indexOptimize(String indexName ) {
logger.info("ES索引开始优化,索引名为:"+indexName);
Client client = getClient();
try {
ForceMergeResponse response =
client.admin().indices().forceMerge(
new ForceMergeRequest(indexName)
.flush(true)//是否合并完成后金进行flush操作,默认为true
.maxNumSegments(1)//最大合并segment数
.onlyExpungeDeletes(true)//是否只删除已做删除标记的记录
).actionGet();
if(response.getShardFailures().length == response.getTotalShards()){
logger.info("ES索引优化失败"+response.getShardFailures());
return false;
}else if(response.getShardFailures().length>0){
logger.info("ES索引优化部分分片失败"+response.getShardFailures());
}
logger.info("ES索引优化成功");
return true;
}catch (Exception e) {
logger.error("ES优化失败", e);
return false;
}
}