我想知道bool查詢的執行順序
請問filter第一則must?
OST _search
{
"query": {
"bool" : {
"must" : {
"term" : { "user.id" : "kimchy" }
},
"filter": {
"term" : { "tags" : "production" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tags" : "env1" } },
{ "term" : { "tags" : "deployed" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
uj5u.com熱心網友回復:
在您的情況下,術語 query onuser.id應該進入filter陣列,因為它是一個不需要評分的完全匹配查詢,因此must沒有意義。must應該用于需要評分的自由文本查詢,而不是不需要的精確是/否查詢。
但是要回答您的問題,是的,filter并且must_not(我們稱之為過濾器背景關系)首先執行以將檔案集減少到可能的最小集合,然后在該檔案上運行must和should查詢(我們稱之為查詢背景關系)放。
uj5u.com熱心網友回復:
Elasticsearch 官方網站上有一篇關于這個主題的博客文章。我不知道自 2017 年發布以來它是否仍然適用。當然,你可以閱讀它以獲得更好的理解,但為了快速總結,它說
“哪個查詢先運行”沒有簡單的答案!
我們也認為filter應該在查詢之前執行以減少檔案集,但博客聲稱
一切都是交錯的,無論它們是否是過濾器的查詢。
很難知道首先執行哪些查詢/過濾器。此內部資訊不會公開。正如博客所建議的那樣,有一種可能有幫助的方法是查看Profile API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/366900.html
標籤:弹性搜索
