繁体   English   中英

从弹性搜索中按前缀删除文档

[英]Delete documents by prefix from elastic search

我有以下格式的 JSON 文档,我想删除idusers_开头的文档。

{
"id": "users_1",
"name": "Adam"
}

一种方法是使用通配符获取所有文档,然后删除它们的 ID,但这需要两次请求。 有没有办法在单个字段上使用通配符删除?

我试过的解决方案是

requests.post(
    'https://<some-project>.us-central1.gcp.cloud.es.io/api/as/v1/engines/<project-name>/_delete_by_query?conflicts=proceed&pretty',
    headers=header, 
    data=json.dumps({
        "query": {
            "match_all": {"ids": "users_*"}
        }
    })
)

根据您的id映射, prefix查询也应该有效:

.../_delete_by_query
{
  "query": {
    "prefix": {
      "id": {
        "value": "users_"
      }
    }
  }
}

通常,您应该使用按查询删除 API ( https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html ),它可以让您(您猜对了。)删除与查询匹配的文档,而不必事先知道它们的文档 ID。

我建议针对您的特定用例使用前缀查询 ( https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html )。 但是,这需要将您的 id 字段映射为文本才能执行全文搜索。

我希望我能帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM