gang_qi_xi_2 2023-01-13 11:19 采纳率: 80%
浏览 64
已结题

ES如何实现一次检索多个检索条件

ES 如何实现在一次检索中既用AggregationBuilders.count统计某一字段的个数又把这个个数作为检索条件。类似select count(personId) as num from tableName where num<5

  • 写回答

2条回答 默认 最新

  • 流比 2023-01-13 12:31
    关注

    在 Elasticsearch 中,可以使用 Bool Query 来实现在一次检索中添加多个检索条件。

    首先, 使用 AggregationBuilders.count() 来统计某一字段的个数,然后将这个统计结果作为条件进行查询。

    示例代码如下:

    SearchRequestBuilder srb = client.prepareSearch("indexName")
        .setTypes("typeName")
        .setQuery(QueryBuilders.boolQuery()
            .must(QueryBuilders.termQuery("personId", "value"))
            .filter(QueryBuilders.rangeQuery("num").lt(5))
        )
        .addAggregation(AggregationBuilders.count("num").field("personId"))
        .setSize(0);
    SearchResponse sr = srb.execute().actionGet();
    

    其中,setQuery() 方法中的 boolQuery() 可以添加多个查询条件,must() 方法用于添加必须满足的条件,filter() 方法用于添加过滤条件。

    在这个例子中,先用 termQuery() 添加 personId 的查询条件,然后使用 rangeQuery() 添加 num 的过滤条件,最后调用 addAggregation() 方法添加统计聚合。

    最后调用 execute() 方法执行查询,actionGet() 方法可以获取查询结果。

    在这个例子中,我们实现了在一次检索中同时使用聚合和查询条件的功能,你可以根据需要在其上面做更改。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月17日
  • 已采纳回答 2月17日
  • 创建了问题 1月13日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分