在弹性搜索中删除n次重复数据

时间:2016-08-04 08:28:48

标签: elasticsearch

因为我在弹性搜索(2.x)中有以下数据

所有json消息都存储在名为" test"

的相同索引下
{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}
{"message_id": "2", "severity": "critical"}
{"message_id": "2", "severity": "critical"}
{"message_id": "2", "severity": "critical"}
{"message_id": "2", "severity": "critical"}

每个json已被复制4次。有什么方法可以在弹性serch中运行删除查询并仅保留

{"message_id": "1", "severity": "info"}
{"message_id": "2", "severity": "critical"}

2 个答案:

答案 0 :(得分:0)

您确定,重复的邮件是否真的存储了?请记住,那4个JSON

{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}
{"message_id": "1", "severity": "info"}

与:

相同
{"message_id": "1", "severity": "info"}

应用相同的JSON(PUT),将导致用更新的弹性搜索文档替换弹性搜索文档。

答案 1 :(得分:0)

步骤1:首先需要使用聚合查找所有重复项:

curl -XGET 'http://localhost:9200/test/type1/_search?pretty=true' -d '{
  "size": 0,
  "aggs": {
    "duplicateCount": {
      "terms": {
      "field": "message_id",
        "min_doc_count": 2
      },
      "aggs": {
        "duplicateDocuments": {
          "top_hits": {}
        }
      }
    }
  }
}'

步骤2:获得重复项列表后,运行循环以在所有这些文档上调用DELETE,并在步骤1中返回“_id”。