【发布时间】:2020-01-09 20:33:18
【问题描述】:
我写了一个弹性搜索查询,payload看起来像
"userData": [ { "sub":1234, "value":678,"condition" :"A" },{ "sub":1234, "value":678,"condition" : "B" }]
查询:
{
"aggs": {
"student_data": {
"date_histogram": {
"field":"@timestamp",
"calendar_interval":"minute"
},
"aggs": {
"user_avg": {
"avg": {
"field":"value"
}
}
}
}
}
}
结果给出了两个值的平均值,即条件 A 和条件 B,但我真正想要的是基于最小间隔时间段的条件 B 的平均值。
【问题讨论】:
-
这是您正在执行的唯一查询吗?
-
@Kapil 是的,它是我正在执行的查询的一部分
-
请分享您的映射。
-
@Kapil: 查询将获取条件 B 存在的所有文档,因此 A 条件将被考虑到聚合中,你必须在里面添加一个 agg_filter (请不要我在里面放一个术语过滤器,我们需要映射来知道我们是否必须使用查询字符串、术语或其他东西。我们还需要映射来测试,因为我认为我们需要将其映射为嵌套字段
-
{ "query":{ "query_string":{ "query":"condition:B" } }, "aggs":{ "student_data":{ "date_histogram":{ "field": “@timestamp”、“calendar_interval”:“分钟”}、“aggs”:{“condition_B”:{“filter”:{“term”:{“condition”:“b”}}、“aggs”:{“ user_avg" : { "avg" : { "field" : "value" } } } } } } }
标签: java elasticsearch kibana dsl