我试图删除一组与具有特定值的字段不匹配的文档,方法是通过DELETE请求将以下数据发送到“localhost:9200 / products / phone”:
{
"query": {
"filtered": {
"query": {
"match_all": []
},
"filter": {
"bool": {
"must": [],
"should": [],
"must_not": {
"term": {
"batch": 1433585920
}
}
}
}
}
}
}
但是此查询最终会删除/ products / phone类型的所有文档,包括“批处理”中具有1433586041值的文档。我做错了什么?
答案 0 :(得分:1)
删除您正在执行此操作的方式是删除索引的类型phone
:
curl -XDELETE host:9200/products/phone -d '{ ... }'
在这种情况下,请求有效负载将被忽略。 You need to use the _query
endpoint:
curl -XDELETE host:9200/products/phone/_query -d '{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": {
"term": {
"batch": 1433585920
}
}
}
}
}
}
}'
所有这些都说Delete By Query is a little bit trappy and I suggest that you do not use it。 goal is to completely rewrite it,但尚未发生 - 因此建议使用Scan / Scroll API查找与您的过滤器匹配的文档,然后使用批量API按ID删除它们。这是更多的努力,但它将是一个更好的集群稳定性解决方案,直到重写“按查询删除”端点。