gpt4 book ai didi

java - 用于获取值数组的 Elasticsearch 查询

转载 作者:行者123 更新时间:2023-12-01 18:40:12 30 4
gpt4 key购买 nike

您好,编写了一个查询,用于获取 Elastic 搜索中某个位置的平均值 Elasticsearch 负载:“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”的平均值为 42,值为 {20,10,40,60,80}

在输出中需要一个可以提供 [20,10,40,60,80] 数组的字段

最佳答案

我认为您无法在查询响应中获得类似于 [20, 10, 40, 60, 80] 格式的数组。我想不出通过使用聚合或脚本字段来获取它的方法。尽管如此,您可以轻松地 (1) 从指定聚合和过滤器逻辑的同一查询中获取该信息;然后,(2) 对查询响应进行后处理,以收集用于计算平均值的所有 value 值,按照您喜欢的方式设置它们的格式。您对响应进行后处理的方式取决于您用于向 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"
}
}
}
}

或者,您可以使用术语聚合以更紧凑的方式输出用于计算平均值的值。

{
"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
}
}

关于java - 用于获取值数组的 Elasticsearch 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59947644/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com