gpt4 book ai didi

elasticsearch - Elasticsearch中字符串字段的分位数聚合

转载 作者:行者123 更新时间:2023-12-02 23:04:12 26 4
gpt4 key购买 nike

我在elasticsearch索引中有一个字符串字段,并尝试在该字段上执行百分位数或分位数聚合(在数字字段上效果很好)。

假设字符串字段中有10,000个名称或城市,则预期结果应该是这样的:

索要四个水桶时:

A-E (2500), F-K (2500), L-M (2500), N-Z (2500)

这些术语不是按字母顺序均匀分布,但存储桶的大小应大致相同。 2600,2400,2800,2200的期限计数是可以接受的。

最佳答案

我不太明白你的问题。但是,如果您有很多城市,似乎可以做任何事情。这就是您可以做的。考虑您的文档是这样的:

{
"city": "New York",
...
}

您可以运行以下聚合查询:
curl -XGET http://localhost:9200/aggs/cities/_search
{
"query": {
"match_all": {}
},
"aggs": {
"cities_by_first_char": {
"terms": {
"field": "city",
"script": "_value[0]"
}
}
}
}

使用此方法,您可以看到城市的第一个字符,然后可以根据需要创建任意数量的范围组,然后在此基础上执行计算。

如果您打算大量运行这种查询/汇总,那么我建议您不要使用 script汇总。问题在于,由于没有使Elasticsearch执行脚本,因此使用大量文档会变得非常缓慢。如果您的用例仅限于以第一个字符开头的城市,那么我建议您像在文档中那样添加另一个字段,如下所示:
{
"city": "New York",
"city_first_char": "N",
...
}

现在,您可以在 city_first_char字段上进行术语汇总,这与 script aggs相比非常快。

希望这可以帮助。

关于elasticsearch - Elasticsearch中字符串字段的分位数聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633302/

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