ES7 - 多个字段sum之后倒序 取前10

本文介绍了如何在Elasticsearch中构建一个搜索请求,使用ScriptAPI对field1,field2,field3的值进行求和并按总和降序排序。示例代码展示了如何构造查询条件、Script对象以及排序过程。
摘要由CSDN通过智能技术生成

类似SQL: select sum(field1 + field2 +  field3) as sum from table order by sum

SearchRequest searchRequest = new SearchRequest(索引);
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(10);

            BoolQueryBuilder boolQueryBuilder = 这里构建查询条件


            // 创建一个script来求和三个字段
            Script script = new Script(
                    Script.DEFAULT_SCRIPT_TYPE,
                    Script.DEFAULT_SCRIPT_LANG,
                    "doc['field1'].value + doc['field2'].value + doc['field3'].value",
                    Collections.emptyMap()
            );

            // 添加script字段到source builder
            ScriptSortBuilder scriptSortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER)
                    .order(SortOrder.DESC);

            // 添加 ScriptSortBuilder 到搜索源构建器
            searchSourceBuilder.query(boolQueryBuilder)
                    .fetchSource(new String[]{"id", "name", "sex"}, null)
                    .sort(scriptSortBuilder);

            searchRequest.source(searchSourceBuilder);
            SearchResponse response = clinet.search(searchRequest, RequestOptions.DEFAULT);
            SearchHit[] hits = response.getHits().getHits();

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值