如何删除不包含特定值的elasticsearch索引中的所有文档?

时间:2018-02-19 14:35:13

标签: elasticsearch

我的文档包含各种字段,如(timestamp,metric_name等)。 我想删除metric_name字段不匹配cpu/timequery/time的所有文档。

3 个答案:

答案 0 :(得分:0)

您需要做的就是POST以下的_delete_by_query

POST <put_your_index_name_here>/_delete_by_query
{
  "query": {
    "bool": {
      "must_not": [{
        "terms": {
          "metric_name.keyword": ["cpu/time","query/time"]
        }
      }]
    }
  }
}

资源:

答案 1 :(得分:0)

我也想出了以下方法。

POST / _delete_by_query

{
"query": {
    "bool": {
        "must_not": [{
            "bool": {
                "should": [{
                        "match_phrase": {
                            "metric": "cpu/time"
                        }
                    },
                    {
                        "match_phrase": {
                            "metric": "query/time"
                        }
                    }
                ],
                "minimum_should_match": 1
            }
        }]
    }
}

}

match_phrase 有效,因为在其他指标中没有匹配的前缀

答案 2 :(得分:0)

如果删除的记录更多,请不要错过运行forcemerge以完全删除它们。 按查询删除只是将它们标记为已删除而不是删除它们