如何使用Python在Elasticsearch集群中按精确匹配规则搜索并删除文档
报错原因
delete_by_query 的请求体需要符合 Elasticsearch DSL 语法规范,不能直接将字段过滤条件放在 body 根节点,所有查询逻辑必须嵌套在 query 参数内部,你之前的写法不符合语法要求所以触发解析异常。
正确实现代码
如果需要精确匹配 name 为指定值的文档,使用如下代码即可:
from elasticsearch import Elasticsearch es = Elasticsearch() names = ['AB'] for name in names: es.delete_by_query( index="myindex", body={ "query": { "term": { # 如果你的name字段本身就是keyword类型,直接写"name": name即可 "name.keyword": name } } } )
补充说明
- 如果你需要的是模糊匹配而非精确匹配,可以将
term查询替换为match查询:"query": { "match": { "name": name } } - 如果待删除的文档量很大,可以添加
wait_for_completion=False参数让删除任务异步执行,避免接口超时。
内容的提问来源于stack exchange,提问作者Maws
相关产品推荐
相关产品推荐

