一、基本概念
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-hant/n/131739.html