2017-06-25 12 views
0

ユースケース:特定のIDを持っていないすべてのドキュメントを削除します。boolクエリでは必須ではありませんか?

マッピング:

"bookList": { 
        "properties": { 
        "bookname": { 
         "type": "string" 
        }, 
        "bookId": { 
         "type": "long" 
        }, 
} 

内容は、各文書で次のようになります。いくつかは、内側のリストは、それがDOC1も聞かせてあります

"bookList": [ 
        { 
        "bookname": "HITLER", 
        "bookId": 3163 
        }, 
        { 
         "bookname": "MARTIAN", 
         "bookId": 1210 
        } 
        ] 

そして、このようないくつかの1つのリストだけが、それはDOC2とします

"bookList": [ 
        { 
        "bookname": "WASHINGTON", 
        "bookId": 3163 
        } 
        ] 

そして別のドキュメントDOC3:

"bookList": [ 
         { 
         "bookname": "SHELDON", 
         "bookId": 3163 
         }, 
         { 
          "bookname": "MARVELS", 
          "bookId": 1219 
         } 
         ] 

私はブールクエリでMUST_NOTを使用してbookId : 3163持っていないされている文書を削除するには、ES 2.4.0でdelete_by_queryプラグインを使用しています。内部リスト文書(すなわち、DOC1 & DOC3)の場合、その用語が内部リストのいずれかに存在し、その文書を削除していない場合、MUST_NOTは正確な用語を見つけるため、削除しません。

私のクエリは、このようなものです:

{ 
    "query" : { 
    "bool" : { 
     "must_not" : { 
      "term" : { 
     "bookList.bookId" :3163 
      } 
    } 
    } 
} 
} 

このクエリのみDOC2なくDOC1を削除しています。 内部リスト文書を削除するにはどうしたらいいですか?

+0

代わりにワイルドカードクエリを使用します。 – tom

+0

「book_Id」のワイルドカードクエリを意味していますか? book_IDのために私はユニークなidの – Seeker

+0

を使用しなければならないので、一度に複数のユニークなbookIdsを削除したいですか? – tom

答えて

0

私はフィルタのコンテキストを使用する必要がありますと思います。フィルタの文脈では

は、クエリ句は、質問が「この 文書の試合にこのクエリ句をしていますか?」に答える答えは、単純なはいか noです - 何のスコアが計算されていません。 (From:documentation

Elasticのドキュメントを参照してください。

PUT _template/stackoverflow 
{ 
    "template": "stackoverflow", 
    "settings": { 
    "number_of_shards": 1 
    }, 
    "mappings": { 
    "bookList": { 
     "properties": { 
     "bookname": { 
      "type": "text" 
     }, 
     "bookId": { 
      "type": "long" 
     } 
     } 
    } 
    } 
} 


POST stackoverflow/bookList/1 
{ 
    "bookList": [ 
    { 
     "bookname": "HITLER", 
     "bookId": 3163 
    }, 
    { 
     "bookname": "MARTIAN", 
     "bookId": 1210 
    } 
    ] 
} 

POST stackoverflow/bookList/2 
{ 
    "bookList": [ 
    { 
     "bookname": "WASHINGTON", 
     "bookId": 3163 
    } 
    ] 
} 

POST stackoverflow/bookList/3 
{ 
    "bookList": [ 
    { 
     "bookname": "SHELDON", 
     "bookId": 3163 
    }, 
    { 
     "bookname": "MARVELS", 
     "bookId": 1219 
    } 
    ] 
} 

POST stackoverflow/bookList/4 
{ 
    "bookList": [ 
    { 
     "bookname": "SHELDON", 
     "bookId": 3164 
    }, 
    { 
     "bookname": "MARVELS", 
     "bookId": 1220 
    } 
    ] 
} 

実行:

GET stackoverflow/bookList/_search 
{ 
    "query": { 
    "constant_score": { 
     "filter": { 
     "bool": { 
      "must_not": { 
      "term": { 
       "bookList.bookId": 3163 
      } 
      } 
     } 
     } 
    } 
    } 
} 

結果:

{ 
    "took": 0, 
    "timed_out": false, 
    "_shards": { 
    "total": 1, 
    "successful": 1, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "stackoverflow", 
     "_type": "bookList", 
     "_id": "4", 
     "_score": 1, 
     "_source": { 
      "bookList": [ 
      { 
       "bookname": "SHELDON", 
       "bookId": 3164 
      }, 
      { 
       "bookname": "MARVELS", 
       "bookId": 1220 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

実行:

GET stackoverflow/_search 
{ 
    "query": { 
    "bool": { 
     "must": { 
     "term": { 
      "bookList.bookId": 3163 
     } 
     } 
    } 
    } 
} 

結果:

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
    "total": 1, 
    "successful": 1, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 3, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "stackoverflow", 
     "_type": "bookList", 
     "_id": "1", 
     "_score": 1, 
     "_source": { 
      "bookList": [ 
      { 
       "bookname": "HITLER", 
       "bookId": 3163 
      }, 
      { 
       "bookname": "MARTIAN", 
       "bookId": 1210 
      } 
      ] 
     } 
     }, 
     { 
     "_index": "stackoverflow", 
     "_type": "bookList", 
     "_id": "2", 
     "_score": 1, 
     "_source": { 
      "bookList": [ 
      { 
       "bookname": "WASHINGTON", 
       "bookId": 3163 
      } 
      ] 
     } 
     }, 
     { 
     "_index": "stackoverflow", 
     "_type": "bookList", 
     "_id": "3", 
     "_score": 1, 
     "_source": { 
      "bookList": [ 
      { 
       "bookname": "SHELDON", 
       "bookId": 3163 
      }, 
      { 
       "bookname": "MARVELS", 
       "bookId": 1219 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 
関連する問題