Elasticsearch DSL 转换为 Java RestHighLevelClient 查询

新手上路,请多包涵

我的 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 来取值吗?

阅读 4.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题