【发布时间】:2017-06-25 18:36:28
【问题描述】:
用例:我想删除所有没有特定 id 的文档。
映射:
"bookList": {
"properties": {
"bookname": {
"type": "string"
},
"bookId": {
"type": "long"
},
}
每个文档中的内容都是这样的:有些有内部列表,让它成为DOC1:
"bookList": [
{
"bookname": "HITLER",
"bookId": 3163
},
{
"bookname": "MARTIAN",
"bookId": 1210
}
]
有些只有一个这样的列表让它成为DOC2
"bookList": [
{
"bookname": "WASHINGTON",
"bookId": 3163
}
]
还有另一个文档 DOC3:
"bookList": [
{
"bookname": "SHELDON",
"bookId": 3163
},
{
"bookname": "MARVELS",
"bookId": 1219
}
]
我在 ES 2.4.0 中使用 delete_by_query 插件来删除没有 bookId : 3163 在 bool query 中使用 MUST_NOT 的文档。对于内部列表文档(即 DOC1 和 DOC3),它不会删除它们,因为如果该术语存在于任一内部列表中,则 MUST_NOT 找到确切的术语,那么它不会删除该文档。
我的查询是这样的:
{
"query" : {
"bool" : {
"must_not" : {
"term" : {
"bookList.bookId" :3163
}
}
}
}
}
此查询仅删除 DOC2,但不删除 DOC1。 我怎样才能删除内部列表文档?
【问题讨论】:
-
改用通配符查询
-
你的意思是
book_Id的通配符查询?因为对于 book_ID,我必须使用唯一 ID -
您想一次删除多个唯一的 bookId 吗?
-
是的,我想删除多个 bookIds
-
试试这个 - jsoncompare.com/#!/simple/…
标签: elasticsearch