gpt4 book ai didi

elasticsearch - ElasticSearch中唯一聚合doc_count的计数

转载 作者:行者123 更新时间:2023-12-02 22:55:27 24 4
gpt4 key购买 nike

使用ElasticSearch 7.0,通过聚合我可以为每个用户获得多少日志:

"aggs": {
"by_user": {
"terms": {
"field": "user_id",
}
}
}

这会给我类似的信息:
user32: 25
user52: 20
user10: 20
...

我想知道多少用户有25条日志,多少用户有20条日志,等等。理想的结果是:
25: 1
20: 2
19: 4
12: 54

因为54个用户有12条日志行。

如何进行聚合以返回此结果?

最佳答案

听起来您可以使用Bucket Script Aggregation简化查询,但问题是仍然存在open PR on this topic

因此,现在我认为最简单的方法是将无痛脚本与Scripted Metric Aggregation一起使用。我建议您仔细阅读其执行的各个阶段。

就代码而言,我知道这不是解决问题的最佳算法,但是查询又快又脏,看起来可能像这样:

GET my_index/_search
{
"size": 0,
"query" : {
"match_all" : {}
},
"aggs": {
"profit": {
"scripted_metric": {
"init_script" : "state.transactions = [:];",
"map_script" :
"""
def key = doc['firstName.keyword'];
if (key != null && key.value != null) {
def value = state.transactions[key.value];
if(value==null) value = 0;
state.transactions[key.value] = value+1
}
""",
"combine_script" : "return state.transactions",
"reduce_script" :
"""
def result = [:];
for (state in states) {
for (item in state.entrySet()) {
def key=item.getValue().toString();
def value = result[key];
if(value==null)value = 0;
result[key]=value+1;
}
}
return result;
"""
}
}
}
}

关于elasticsearch - ElasticSearch中唯一聚合doc_count的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56258513/

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