某些记录在我的索引中重复,该索引由数字字段recordid
标识。
在elasticsearch中有逐个删除的查询,我可以用它来删除任何一个重复记录吗?
或其他一些方法来实现这一目标?
答案 0 :(得分:2)
是的,您可以找到带有聚合查询的重复文档:
curl -XPOST http://localhost:9200/your_index/_search -d '
{
"size": 0,
"aggs": {
"duplicateCount": {
"terms": {
"field": "recordid",
"min_doc_count": 2,
"size": 10
},
"aggs": {
"duplicateDocuments": {
"top_hits": {
"size": 10
}
}
}
}
}
}'
然后最好使用批量查询删除重复的文档。查看es-deduplicator自动重复删除(免责声明:我是该脚本的作者)。
注意:聚合查询可能非常昂贵,可能会导致节点崩溃(如果索引太大而数据节点数太少)。
答案 1 :(得分:1)
Elasticsearch建议"use(ing) the scroll/scan API to find all matching ids and then issue a bulk request to delete them"。
**被修改
答案 2 :(得分:0)
这里的第一个挑战是识别重复的文件。为此,您需要在定义文档唯一性的字段上运行术语聚合。在第二级聚合中,使用top_hits来获取文档ID。一旦你在那里,你将获得具有重复文件的ID。
现在您可以安全地删除它们,可能正在使用批量API。
您可以阅读其他检测和删除重复文档的方法here。