一 原理知識
Bool查詢包括四種子句:
- must
- filter
- should
- must_not
1.must
檔案 必須 匹配這些條件才能被包含進來,
相當于sql中的 and
2.must_not
檔案 必須不 匹配這些條件才能被包含進來,
相當于sql中的 not
3.should
如果滿足這些陳述句中的任意陳述句,將增加 _score ,否則,無任何影響,它們主要用于修正每個檔案的相關性得分,
相當于sql中的or
4.filter
必須 匹配,但它以不評分、過濾模式來進行,這些陳述句對評分沒有貢獻,只是根據過濾標準來排除或包含檔案,
區別:
must:回傳的檔案必須滿足must子句的條件,并且參與計算分值
filter:回傳的檔案必須滿足filter子句的條件,但是跟Must不一樣的是,不會計算分值, 并且可以使用快取
must和filter是一樣的,區別是場景不一樣,如果結果需要算分就使用must,否則可以考慮使用filter,使查詢更高效,
注意:
當使用should查詢時,如果包含了must或者filter查詢,那么should的查詢陳述句就不是或者【OR】的意思了,而是有或者沒有都行的含義,filter和should陳述句組合查詢,會導致should陳述句失效,
1 搜索 (state = 0 或者 state不存在的記錄) and payState = 1 2 { 3 query: { 4 bool: { 5 filter: [{ 6 "bool": { 7 "should": [ 8 { "term": { "state": 0 } }, 9 { "bool": { "must_not": { "exists": { "field": "state" } } } } 10 ] 11 } 12 }, 13 { term: { payState: 1 } } 14 ] 15 16 } 17 } 18 } 19 }View Code
二 設計

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/527810.html
標籤:其他
下一篇:重溫Python基礎——變數
