Elasticsearch DSL 转换为 Java RestHighLevelClient 查询

发布于 2022-09-11 23:40:46 字数 1792 浏览 19 评论 0

我的 DSL 语句是这样的

{
  "query": {
    "range": {
      "json.time": {
        "gte": "2019-10-01",
        "lte": "2019-11-22"
      }
    }
  },
  "aggs": {
    "access_over_time": {
      "date_histogram": {
        "field": "json.time",
        "interval": "hour"
      },
      "aggs": {
        "access_over_time": {
          "filters": {
            "filters": {
              "success": {
                "match":{
                  "json.success":true
                }
              },
              "failed":{
                "match":{
                  "json.success":false
                }
              }
            }
          }
        }
      }
    }
  }
}

现在想在 Java 项目中使用 RestHighLevelClient 和 Elasticsearch 交互
我尝试了下写成了以下代码

searchSourceBuilder.query(
QueryBuilders.rangeQuery("json.time").gt(startTime).lt(endTime))
    .aggregation(
        AggregationBuilders.terms("aggregations").field("access_over_time")
            .subAggregation(
                AggregationBuilders.dateHistogram("access_over_time")
                            .field("json.time")
                            .dateHistogramInterval(new DateHistogramInterval(unit))))
    .aggregation(
        AggregationBuilders.terms("access_over_time").field("access_over_time")
            .subAggregation(AggregationBuilders
                .filters("buckets",
                        new FiltersAggregator.KeyedFilter("success",QueryBuilders.matchQuery("json.success",true)),
                        new FiltersAggregator.KeyedFilter("failed",QueryBuilders.matchQuery("json.success",false)))));

对于 aggregation 区域的查询存在问题,请问我该如何修改聚集查询的 Java 代码呢?或者 RestHighLevelClient 是否有提供更原生的 json 格式查询呢?

进一步问题,若成功查询,我该如何取出我想要的聚集数据呢?直接转成 json 来取值吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文