ElasticSearch - 按特定字段删除文档

Stp*_*111 5 elasticsearch

这个看似简单的任务在 ElasticSearch 文档中没有得到很好的记录:

我们有一个 ElasticSearch 实例,它的索引中有一个名为 的字段sourceId。我首先会调用什么 API,字段中GET包含 100 的所有文档sourceId(以在删除前验证结果),然后调用DELETE相同的文档?

Kam*_*mal 11

您可能需要在此处进行两次 API 调用。第一个查看文档数量,第二个执行删除。

查询将是相同的,但终点不同。另外我假设sourceId将是类型keyword

查询验证

POST <your_index_name>/_search
{
  "size": 0,
  "query": {
    "term": {
      "sourceId": "100"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

执行上面的Term Query并记下hits.total响应的 。

"size":0如果您想查看整个文档作为响应,请删除上述查询中的 。

获得详细信息后,您可以继续使用以下查询中所示的相同查询执行删除,但请注意端点。

要删除的查询

POST <your_index_name>/_delete_by_query
{
  "query": {
    "term": {
      "sourceId": "100"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

执行Deletion By Query 后,请注意deleted响应中的字段。它必须显示相同的数字。

我使用了术语查询,但是您也可以使用任何Match或任何复杂的Bool Query。只要确保查询是正确的。

希望能帮助到你!

  • @Stpete111 从技术上讲,它不是。只是不需要在“100”周围使用“双引号”。意思是“sourceId”:100 (2认同)