gpt4 book ai didi

ElasticSearch - 比较两个时间段内的不同值

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

与以下问题作斗争-我在 ElasticSearch 中有一个庞大的数据集,我想比较两个时间段内的不同 ID。

这里有一个简单的例子,这样你会更好地理解我的意思:过去 24 小时内发送了以下数据:

{id: 1}, {id: 2}, {id: 3}

并且此数据是在一周前的 24 小时内发送的:

{id: 2}, {id: 3}, {id: 4}

我要输出:

1, 4

想法?

最佳答案

Bucket selector aggregation可用于选择存在于一个区间但不存在于其他区间的字段

我获取了包含唯一 ID 1 和 2 的三个文档的数据集。ID 1 出现在日期“2020-04-22”和“2020-04-23”,而 Id 2 仅出现在“2020- 04-23”。所以查询应该只返回 Id 2

数据:

"hits" : [
{
"_index" : "index21",
"_type" : "_doc",
"_id" : "N48Xp3EB1jFeu7E5np_U",
"_score" : 1.0,
"_source" : {
"id" : 1,
"date" : "2020-04-23"
}
},
{
"_index" : "index21",
"_type" : "_doc",
"_id" : "OI8Xp3EB1jFeu7E5z5-5",
"_score" : 1.0,
"_source" : {
"id" : 1,
"date" : "2020-04-22"
}
},
{
"_index" : "index21",
"_type" : "_doc",
"_id" : "OY8Yp3EB1jFeu7E5GJ_V",
"_score" : 1.0,
"_source" : {
"id" : 2,
"date" : "2020-04-23"
}
}
]

使用 terms aggregation获取所有唯一标识。在每个术语下查找不同间隔的文档计数。选择在任一区间中计数为 0 的项。

 Terms      1
"2020-04-22" 1(doc count)
"2020-04-23" 1(doc count)
2
"2020-04-22" 0(doc count)
"2020-04-23" 1(doc count)

Select term 2

查询:

{
"size": 0,
"aggs": {
"ids": {
"terms": {
"field": "id",
"size": 10
},
"aggs": {
"document_first_interval": {
"filter": {
"range": {
"date": {
"gte": "2020-04-23"
}
}
}
},
"document_second_interval": {
"filter": {
"range": {
"date": {
"gte": "2020-04-22",
"lt": "2020-04-23"
}
}
}
},
"select_bucket": {
"bucket_selector": {
"buckets_path": {
"first_interval": "document_first_interval._count",
"second_interval": "document_second_interval._count"
},
"script": "if(params.first_interval==0||params.second_interval==0) return true;"
}
}
}
}
}
}

给出结果:

"aggregations" : {
"ids" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 2,
"doc_count" : 1,
"document_second_interval" : {
"doc_count" : 0
},
"document_first_interval" : {
"doc_count" : 1
}
}
]
}
}

关于ElasticSearch - 比较两个时间段内的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387218/

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