gpt4 book ai didi

elasticsearch - 使用多个字段作为唯一键的 Dedup elasticsearch 结果

转载 作者:行者123 更新时间:2023-11-29 02:52:23 24 4
gpt4 key购买 nike

有人问过类似的问题(请参阅 Remove duplicate documents from a search in Elasticsearch ),但我还没有找到使用多个字段作为“唯一键”进行重复数据删除的方法。这是一个简单的例子来说明我正在寻找的东西:

假设这是我们的原始数据:

{ "name": "X", "event": "A", "time": 1 }
{ "name": "X", "event": "B", "time": 2 }
{ "name": "X", "event": "B", "time": 3 }
{ "name": "Y", "event": "A", "time": 4 }
{ "name": "Y", "event": "C", "time": 5 }

我基本上想根据名称和事件获取不同的事件计数。我想避免重复计算同名 X 上发生的事件 B 两次,所以我要查找的计数是:

event: A, count: 2
event: B, count: 1
event: C, count: 1

有没有办法设置相关问题中看到的聚合查询?我考虑过的另一个选择是用一个特殊的键字段(即“X_A”、“X_B”等)来索引对象。然后我可以简单地在这个字段上删除重复数据。我不确定哪个是首选方法,但我个人更愿意不使用额外的元数据为数据编制索引。

最佳答案

您可以在 terms 聚合中指定一个脚本,以便从多个字段构建一个键:

POST /test/dedup/_search
{
"aggs":{
"dedup" : {
"terms":{
"script": "[doc.name.value, doc.event.value].join('_')"
},
"aggs":{
"dedup_docs":{
"top_hits":{
"size":1
}
}
}
}
}
}

这基本上会提供以下结果:

  • X_A:1
  • X_B:2
  • Y_A:1
  • Y_C:1

注意:您的示例数据中只有一个事件 C,因此除非我遗漏了什么,否则计数不能为二。

关于elasticsearch - 使用多个字段作为唯一键的 Dedup elasticsearch 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605846/

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