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 来取值吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论