Elasticsearch删除重复项

时间:2014-07-19 10:03:06

标签: elasticsearch

某些记录在我的索引中重复,该索引由数字字段recordid标识。

在elasticsearch中有逐个删除的查询,我可以用它来删除任何一个重复记录吗?

或其他一些方法来实现这一目标?

3 个答案:

答案 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)

答案 2 :(得分:0)

这里的第一个挑战是识别重复的文件。为此,您需要在定义文档唯一性的字段上运行术语聚合。在第二级聚合中,使用top_hits来获取文档ID。一旦你在那里,你将获得具有重复文件的ID。

现在您可以安全地删除它们,可能正在使用批量API。

您可以阅读其他检测和删除重复文档的方法here