一、must查詢
使用must查詢可以篩選出同時符合多個條件的文檔,相當於邏輯上的「與」操作。下面是一個例子:
POST /_search { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ] } } }
上述查詢的意思是,要同時匹配”title”欄位中包含”elasticsearch”和”content”欄位中包含”search”的文檔,才會被返回。
此外,must查詢還可以用於排除一些文檔。例如,我們可以使用must_not來篩選出不包含指定關鍵詞的文檔:
POST /_search { "query": { "bool": { "must": { "match": { "content": "elasticsearch" } }, "must_not": { "match": { "title": "logstash" } } } } }
上述查詢的意思是,要匹配”content”欄位中包含”elasticsearch”並且”title”欄位中不包含”logstash”的文檔才會被返回。
二、should查詢
使用should查詢可以查找同時符合多個條件之一的文檔,即邏輯上的「或」操作。下面是一個例子:
POST /_search { "query": { "bool": { "should": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ] } } }
上述查詢的意思是,要匹配”title”欄位中包含”elasticsearch”或”content”欄位中包含”search”的文檔,都會被返回。
在should查詢中,我們也可以指定一個minimum_should_match參數,表示至少要匹配多少個查詢條件才會被返回。例如:
POST /_search { "query": { "bool": { "should": [ { "match": { "title": "elasticsearch" }}, { "match": { "content": "search" }} ], "minimum_should_match": 1 } } }
上述查詢的意思是,要匹配”title”欄位中包含”elasticsearch”或”content”欄位中包含”search”的文檔,但至少要滿足一個條件才會被返回。
三、must和should聯合查詢
在實際應用場景中,我們經常需要同時篩選出滿足多個條件之一的文檔,同時排除一些不符合要求的文檔。這時候,就可以使用must和should聯合查詢,如下所示:
POST /_search { "query": { "bool": { "must": { "match": { "content": "elasticsearch" } }, "should": [ { "match": { "title": "logstash" }}, { "match": { "title": "kibana" }} ], "must_not": [ { "match": { "title": "redis" }} ] } } }
上述查詢的意思是,要匹配”content”欄位中包含”elasticsearch”並且”title”欄位中至少滿足一個條件,同時不匹配”title”欄位中包含”redis”的文檔才會被返回。
四、總結
在ES中,使用must查詢可以篩選出同時符合多個條件的文檔,而使用should查詢可以查找同時符合多個條件之一的文檔。兩者結合使用,可以更加精細地組合查詢條件,滿足不同的實際需求。
原創文章,作者:KDNMA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361166.html