获取值数组的弹性搜索查询
Hi编写了一个查询,用于获取弹性搜索中某个位置的平均值 弹性搜索有效负载:“用户数据”:[{“子”:1234,“值”:678,“条件”:“A”},{“子”:1234,“值”:678,“条件”:“B”}]获取值数组的弹性搜索查询,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,Hi编写了一个查询,用于获取弹性搜索中某个位置的平均值 弹性搜索有效负载:“用户数据”:[{“子”:1234,“值”:678,“条件”:“A”},{“子”:1234,“值”:678,“条件”:“B”}] { "aggs": { "student_data": { "date_histogram": { "field":"@timestamp", "calendar_interval":"minute" },
{
"aggs": {
"student_data": {
"date_histogram": {
"field":"@timestamp",
"calendar_interval":"minute"
},
"aggs": {
"user_avg": {
"avg": {
"field":"value"
}
}
}
}
}
}
我想要的是得到返回avg值的元素数组。
例如,如果基于条件“A”的值的平均值为42,值为{20,10,40,60,80}
在需要的输出中,有一个字段可以提供[20,10,40,60,80]的数组,我不认为在查询响应中可以获得格式类似于
[20,10,40,60,80]
的数组。我想不出通过使用聚合或脚本字段来获得它的方法。然而,您可以很容易地(1)从指定聚合和筛选逻辑的同一查询中获取该信息;然后,(2)对查询响应进行后期处理,收集所有用于计算平均值的值,方法是按您喜欢的格式格式化这些值。如何对响应进行后期处理取决于用于向Elasticsearch发送查询的客户端/脚本
例如,可以将用于计算平均值的值输出为查询命中数
{
"size": 100, <-- adjust this upper limit to your use case
"_source": "value", <-- include only the `value` field in the response
"query": {
"match": {
"condition": "A"
}
},
"aggs": {
"user_avg": {
"avg": {
"field": "value"
}
}
}
}
我可以帮助你更清楚一点不幸的是,你的例子并没有让你的问题更清楚(数组[20,10,40,60,8]的平均值是240?)。此外,您还可以从聚合中按项删除筛选器,因为您已经在您的query@glenacota我已经更新了我的查询,请看一看,我想要计算平均值的元素数组。我面临的问题是,当我按照你说的做时,我得到了所有值的平均值,无论是与条件a还是条件B有关。此外,bucket由与条件A和条件B相关的值组成。您确定吗?这不是我期望从该查询中得到的结果,也不是我从测试中得到的结果。聚合对指定查询返回的数据进行操作()是的,我非常确定。原始查询由另一个匹配查询和范围查询组成,我猜我们需要查看原始查询,然后您的新查询以及上面的注释与原始问题(即如何显示用于计算平均值的值数组)有很大不同。虽然我的回答是针对您的原始问题,但它仍然可以根据您的更新进行调整。为了证明这一点,并确保我们在同一页上,我创建了以下要点,以适应您最近的更新:
{
"size": 0,
"_source": "value",
"query": {
"match": {
"condition": "A"
}
},
"aggs": {
"group_by_values": {
"terms": {
"field": "value",
"size": 100 . <-- adjust this upper limit to your use case
}
},
"user_avg": {
"avg": {
"field": "value"
}
}
}
}
"aggregations" : {
"array_of_values" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 50,
"doc_count" : 2
},
{
"key" : 60,
"doc_count" : 1
},
{
"key" : 100,
"doc_count" : 1
}
]
},
"user_avg" : {
"value" : 65.0
}
}