一、基本概念
Elasticsearch是一款基於Lucene的搜索引擎,支持全文檢索、結構化查詢、分散式搜索等功能,同時還可以搭配Logstash、Kibana等組件,構建起一個完整的日誌分析體系。在實際應用中,布爾搜索是elasticsearch中最重要的搜索方式之一,也是最為常見的搜索方式,它支持AND、OR、NOT、MUST、SHOULD、MUST_NOT等關鍵詞進行搜索。
二、基礎布爾搜索
在elasticsearch中可以使用bool查詢進行布爾搜索,它包含must、should、must_not、filter等子查詢條件。其中,must表示必須匹配的條件,should表示可以匹配也可以不匹配的條件,must_not表示必須不匹配的條件,filter表示必須匹配並且會被緩存的條件。
"query": {
"bool": {
"must": [
{"match": {"title": "search"}},
{"range": {"age": {"gte": 18}}}
],
"should": [
{"match": {"gender": "male"}},
{"match": {"keywords": "Java"}}
],
"must_not": [
{"match": {"description": "bad"}}
],
"filter": [
{"term": {"status": "published"}}
]
}
}
在上述布爾查詢條件中,必須要匹配title中含有”search”的記錄並且age大於等於18;可以匹配gender中含有”male”或者keywords中含有”Java”的記錄;不能匹配description中含有”bad”的記錄,最後只返回status為”published”的記錄。
三、權重調整
在實際的搜索過程中,有時候需要根據某些條件進行權重調整,使一些重要的條件會被更多地考慮。在布爾搜索中,可以使用boost屬性來調整權重,其中boost的值越大表示該條件的重要性越高。例如,我們需要查詢關鍵詞”elasticsearch”,並且將title中含有”elasticsearch”的記錄權重調整為3。
"query": {
"bool": {
"should": [
{"match": {"title": {"query": "elasticsearch", "boost": 3}}},
{"match": {"content": "elasticsearch"}}
]
}
}
在上述查詢中,對於匹配到的title中含有”elasticsearch”的記錄,其權重為3,而對於匹配到的content中含有”elasticsearch”的記錄,其權重為1。
四、範圍搜索
在布爾搜索中,可以使用range查詢進行範圍搜索,它支持大於、大於等於、小於等於、小於等四種操作符。例如,我們需要查詢age大於等於18且小於等於30的記錄。
"query": {
"range": {
"age": {
"gte": 18,
"lte": 30
}
}
}
五、模糊搜索
在布爾搜索中,可以使用fuzzy查詢進行模糊搜索,它可以找到與指定詞條相似的詞條,例如在用戶輸入”elasticserch”時,我們仍然能夠找到title中含有”elasticsearch”的記錄。
"query": {
"fuzzy": {
"title": {
"value": "elasticserch",
"fuzziness": "2"
}
}
}
在上述查詢中,fuzziness的值為2,表示可以有兩次錯誤的匹配,從而找到與”elasticsearch”相似的詞條。
六、前綴搜索
在布爾搜索中,可以使用prefix查詢進行前綴搜索,它可以找到以指定詞條開頭的詞條,例如我們需要查詢title以”elas”開頭的記錄。
"query": {
"prefix": {
"title": "elas"
}
}
在上述查詢中,返回的記錄中title都是以”elas”開頭的。
原創文章,作者:PVYF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131739.html
微信掃一掃
支付寶掃一掃