【发布时间】:2022-03-02 22:53:25
【问题描述】:
这个看似简单的任务在 ElasticSearch 文档中没有详细记录:
我们有一个 ElasticSearch 实例,其索引中有一个名为 sourceId 的字段。我将首先对GETsourceId 字段中具有 100 的所有文档进行什么 API 调用(以在删除前验证结果),然后对 DELETE 相同的文档进行调用?
【问题讨论】:
标签: elasticsearch
这个看似简单的任务在 ElasticSearch 文档中没有详细记录:
我们有一个 ElasticSearch 实例,其索引中有一个名为 sourceId 的字段。我将首先对GETsourceId 字段中具有 100 的所有文档进行什么 API 调用(以在删除前验证结果),然后对 DELETE 相同的文档进行调用?
【问题讨论】:
标签: elasticsearch
您可能需要在此处进行两次 API 调用。第一个查看文档计数,第二个执行删除。
查询是相同的,但端点不同。另外我假设sourceId 的类型为keyword
POST <your_index_name>/_search
{
"size": 0,
"query": {
"term": {
"sourceId": "100"
}
}
}
执行上面的Term Query,并在回复的hits.total处记下。
如果您想查看整个文档作为响应,请删除上述查询中的"size":0。
获得详细信息后,您可以继续使用以下查询中所示的相同查询执行删除,但请注意端点。
POST <your_index_name>/_delete_by_query
{
"query": {
"term": {
"sourceId": "100"
}
}
}
执行Deletion By Query 后,请注意响应中的deleted 字段。它必须向您显示相同的数字。
我使用了术语查询,但是您也可以使用任何 Match 或任何复杂的 Bool Query。只要确保查询是正确的。
希望对你有帮助!
【讨论】:
100 周围使用double quotes。这意味着它将类似于"sourceId": 100
POST /my_index/_delete_by_query?conflicts=proceed&pretty
{
"query": {
"match_all": {}
}
}
删除一个索引的所有文档而不删除映射和设置: 见:https://opster.com/guides/elasticsearch/search-apis/elasticsearch-delete-by-query/
【讨论】: