ELascticsearch 5.0 Optimize 强制合并segment java api

合并请求可以控制一个或者多个索引执行合并操作,如果要对所有索引执行,值需要传空数组或者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;
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值