您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么解決elasticsearch should和must共存時should失效的問題”,在日常操作中,相信很多人在怎么解決elasticsearch should和must共存時should失效的問題問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么解決elasticsearch should和must共存時should失效的問題”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
再使用must和should混合查詢的時候,發現should并不起作用。
如a==1時搜索b=1或者b=2的數據,按照編程語言的邏輯則是在a=1的條件下必須滿足b=1或者b=2,
所以must和should平級的寫法是錯誤的。
注意錯誤寫法
根據搜索結果可以發現should并未起作用
正確寫法
$params = [ 'index' => 'news', 'type' => '_doc', 'body' => [ 'query' => [ 'bool' => [ 'must' => [ ['match' => ['age' => 50]], ['bool' => [ 'should' => [ ['match' => ['content' => '西紅柿']], ['match' => ['content' => '中國和美國']] ] ]] ] ] ] ] ]; $result = $this->es->search($params); var_dump($result);
搜索結果
例如在a=1且b=2的數據中,找出c=1或者d=2的數據: {"query": { "bool": { "must": [ {"term": {"a": "1"}}, {"term":{"b": "2"}} ], "should": [ {"term": {"c": "1"}}, {"term": {"d": "2"}} ] } } } 這樣寫的時候should是沒有用的,這是新手可能犯的錯誤之一。 在編寫查詢條件的時候,不能用口頭上的邏輯進行編寫,而是要換成數學邏輯才能進行執行(數據庫同理)。 如上例,數學邏輯應該是 (a==1&&b==2&&c==1)||(a==1&&b==2&&d==2),這樣的結構去查詢。 {"query": { "bool": { "should": [ {"term": {"a": "1"}}, {"term":{"b": "2"}}, {"term": {"c": "1"}} ], "should": [ {"term": {"a": "1"}}, {"term":{"b": "2"}}, {"term": {"d": "2"}} ] } } } 思路就是以上那樣,具體寫法有2種: { "query": { "bool": { "should": [ { "bool": { "must": [ {"term": {"a": "1"}}, {"term":{"b": "2"}}, {"term": {"c": "1"}} ] } }, { "bool": { "must": [ {"term": {"a": "1"}}, {"term":{"b": "2"}}, {"term": {"d": "2"}} ] } } ] } }, "sort": { "time": { "order": "desc" } }, "size": 100 } 或者: { "query": { "bool": { "must": [ {"term": {"a": "1"}}, {"term":{"b": "2"}} { "bool": { "should": [ {"term": {"c": "1"}}, {"term": {"d": "2"}} ] } } ] } }, "sort": { "time": { "order": "desc" } }, "size": 100 }
到此,關于“怎么解決elasticsearch should和must共存時should失效的問題”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。