elasticsearch bool組合查詢

2021-08-15 06:37:51 字數 1726 閱讀 4567

# bool組合查詢

# filter:過濾,不參與打分

# must:如果有多個條件,這些條件都必須滿足 and與

# should:如果有多個條件,滿足乙個或多個即可 or或

# must_not:和must相反,必須都不滿足條件才可以匹配到 !非

布林查詢

與匹配其他查詢的布林組合的文件相匹配的查詢。bool查詢對映到lucene booleanquery。它是使用乙個或多個布林子句構建的,每個子句都有乙個型別化的事件。發生的型別是:

發生描述

must

該條款(查詢)必須出現在匹配的檔案,並將有助於得分。

filter

子句(查詢)必須出現在匹配的文件中。然而不像 must查詢的分數將被忽略。filter子句在過濾器上下文中執行,這意味著評分被忽略,子句被考慮用於快取記憶體。

should

子句(查詢)應該出現在匹配的文件中。如果 bool查詢位於查詢上下文中並且具有mustor filter子句,則bool即使沒有should查詢匹配,文件也將匹配該查詢 。在這種情況下,這些條款僅用於影響分數。如果bool查詢是過濾器上下文 或者兩者都不存在,must或者filter至少有乙個should查詢必須與文件相匹配才能與bool查詢匹配。這種行為可以通過設定minimum_should_match引數來顯式控制 。

must_not

子句(查詢)不能出現在匹配的文件中。子句在過濾器上下文中執行,意味著評分被忽略,子句被考慮用於快取記憶體。因為計分被忽略,0所有檔案的分數被返回。

get 51jobs/job/_search

}, "filter": }}

}}# select * from job where salary=6666 or salary=7777

# 查詢所有資料,篩選出工資等於6666或者7777的資料

get 51jobs/job/_search

}, "filter": }}

}}# 查詢salary等於6666或者title等於python、salary不等於7777、salary不等於8888

get 51jobs/job/_search

}},}}

],"must_not": [

}},}}]}

}}# salary等於6666或者title等於python salary不等於9999 title不等於redis

get 51jobs/job/_search

}},}}

],"must_not": [

}},}}]

}}}

# 查詢title為python或者(title為搜尋並且salary等於6666)的資料

get 51jobs/job/_search

}},}},}}

]}}]

}}}

# 新增空值測試資料

put nulldb/test/_bulk}}

}}}# 處理null空值

# 過濾空值

# exists 處理值不為空或者值不為null的資料

get nulldb/test/_search}}

}}# 篩選出tags值為空或者沒有tags屬性的資料

get nulldb/test/_search}]

}}}

Elasticsearch bool過濾查詢

bool查詢現在包括四種子句,must,filter,should,must not。看上面的流程圖就能很明顯的看到,filter與query還是有很大的區別的。比如,query的時候,會先比較查詢條件,然後計算分值,最後返回文件結果 而filter則是先判斷是否滿足查詢條件,如果不滿足,會快取查詢...

Elasticsearch bool查詢命令詳解

bool查詢介紹 如果我們需要針對多個字段進行多維度的查詢,那麼布林查詢是你的最佳選擇,它可以通過組合多個查詢語句得到最終得結果.bool查詢的使用 示例 下面的查詢用於查詢 title 字段匹配 測試標題 並且不被標識為 spam 的文件。那些被標識為 starred 或在2014之後的文件,將比...

mysql sql組合 詳解mysql 組合查詢

使用union 多數sql查詢都只包含乙個或多個表中返回資料的單條select語句。mysql也允許執行多個查詢 多條select語句 並將結果作為單個查詢結果集返回。這些組合查詢通常稱為並 union 有兩種情況需要使用組合查詢 在單個表查詢中從不同的表返回類似結構的資料 對單個表執行多個查詢,按...