从ElasticSearch中按前缀删除文档

5vf7fwbs  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(2)|浏览(368)

我有以下格式的json文档,我想删除有任何格式的文档 id 从开始 users_ .

{
"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_*"}
        }
    })
)
hc2pp10m

hc2pp10m1#

通常,您应该使用delete by query 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字段Map为文本,以便执行全文搜索。
我希望我能帮助你。

4ngedf3f

4ngedf3f2#

取决于你的 id Map,Map prefix 查询也应该起作用:

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

相关问题