Sha*_*ark 6 duplicates elasticsearch
有人对此提出了类似的问题(请参阅从 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 }
Run Code Online (Sandbox Code Playgroud)
我基本上想根据名称和事件获得不同的事件计数。我想避免重复计算在同名 X 上发生的事件 B 两次,所以我要寻找的计数是:
event: A, count: 2
event: B, count: 1
event: C, count: 1
Run Code Online (Sandbox Code Playgroud)
有没有办法设置 agg 查询,如相关问题所示?我考虑过的另一个选项是使用特殊键字段(即“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
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将基本上提供以下结果:
注意:C您的示例数据中只有一个事件,因此除非我遗漏了什么,否则计数不能为两个。
| 归档时间: |
|
| 查看次数: |
5837 次 |
| 最近记录: |