gpt4 book ai didi

elasticsearch - ElasticSearch计算按以下字段分组的多个字段

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

我有类似的文件

{"domain":"US", "zipcode":"11111", "eventType":"click", "id":"1", "time":100}

{"domain":"US", "zipcode":"22222", "eventType":"sell", "id":"2", "time":200}

{"domain":"US", "zipcode":"22222", "eventType":"click", "id":"3","time":150}

{"domain":"US", "zipcode":"11111", "eventType":"sell", "id":"4","time":350}

{"domain":"US", "zipcode":"33333", "eventType":"sell", "id":"5","time":225}

{"domain":"EU", "zipcode":"44444", "eventType":"click", "id":"5","time":120}

我想通过eventType = sell过滤这些文档,并在125到400之间的时间进行过滤,按域分组,然后按邮政编码分组,并对每个存储分区中的文档进行计数。所以我的输出就像(过滤器将忽略第一个和最后一个文档)

美国11111,1

美国22222,1

美国33333,1

在SQL中,这应该很简单。但是我无法在ElasticSearch上使用它。有人可以帮我吗?

如何编写ElasticSearch查询以完成上述任务?

最佳答案

该查询似乎可以满足您的要求:

POST /test_index/_search
{
"size": 0,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"eventType": "sell"
}
},
{
"range": {
"time": {
"gte": 125,
"lte": 400
}
}
}
]
}
}
}
},
"aggs": {
"zipcode_terms": {
"terms": {
"field": "zipcode"
}
}
}
}

返回
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0,
"hits": []
},
"aggregations": {
"zipcode_terms": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "11111",
"doc_count": 1
},
{
"key": "22222",
"doc_count": 1
},
{
"key": "33333",
"doc_count": 1
}
]
}
}
}

(请注意,“22222”处只有1个“卖出”,而不是2个)。

这是一些我用来测试的代码:

http://sense.qbox.io/gist/1c4cb591ab72a6f3ae681df30fe023ddfca4225b

您可能想看看 terms aggregationsbool filterrange filters

编辑:我刚刚意识到我省略了域部分,但是如果需要的话,也可以直接在其上添加存储桶聚合。

关于elasticsearch - ElasticSearch计算按以下字段分组的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34191810/

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