一些记录在由数字字段标识的索引中重复recordid.
elasticsearch中有delete-by-query,我可以用它来删除任何一个重复记录吗?
或者其他一些方法来实现这一目标?
是的,您可以使用聚合查询找到重复的文档:
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
}
}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
然后最好使用批量查询删除重复的文档。查看es-deduplicator用于自动删除重复项(免责声明:我是该脚本的作者)。
注意:聚合查询可能非常昂贵,并且可能会导致节点崩溃(如果索引太大而数据节点数量太小)。