Elasticsearch——複合查詢

複合查詢是指包含字段類查詢或者複合查詢的類型javascript

constant_score

將查詢內部的結果文檔得分都設定爲1或者boost的值,多用於結合bool查詢實現自定義得分html


GET blog/paper/_search {  "query": {  "constant_score": {  "filter": {  "term": {  "uID": "1"  }  }  }  } }


bool

布爾查詢有一個或者多個布爾子句組成java


語法數組

說明
filter 只過濾符合條件的文檔,不計算相關係得分
must 文檔必須符合must中全部的條件,會影響相關性得分
must_not 文檔必須不符合must_not 中的全部條件
should

文檔能夠符合should中的條件,會影響相關性得分緩存


語法語句elasticsearch


{  "query":{  "bool":{  "must":[  {}  ],  "must_not":[  {}  ],  "should":[  {}  ],  "filter":[  {}  ],  }  } }


filter

filter查詢只過濾符合條件的文檔,es針對filter會有智能緩存,所以其執行效率很高,作簡單的匹配查詢且不考慮算分是,推薦使用filter替代queryoop

上下文類型 執行類型 使用方式
Query 查找和查詢語句最匹配的文檔,對全部文檔進行相關性算分排序 query查詢 bool中的must和should
Filter 查找和查詢語句匹配的文檔 bool中的filter和must_not或者constant_score中的filter

should


  1. bool查詢包含should,不包含must查詢,只包含should,文檔必須知足至少一個條件,minimum_should_match能夠知足條件的個數或者百分比。
  2. bool查詢同時包含should和must查詢,文檔沒必要知足should中的條件,可是若是知足條件,會增長相關性得分。


dis_max query

function_score query

boosting query

filter執行原理深度剖析

1.在倒排索引中查找搜索串,獲取document list。ui

2.爲每一個在倒排索引中搜索到的結果,構建一個bitset,[0, 0, 0, 1, 0, 1]spa

3.遍歷每一個過濾條件對應的bitset,優先從最稀疏的開始搜索,查找知足全部條件的document.net

4.caching bitset,跟蹤query,在最近256個query中超過必定次數的過濾條件,緩存其bitset。對於小segment(<1000,或<3%),不緩存bitset。

5.filter大部分狀況下來講,在query以前執行,先儘可能過濾掉儘量多的數據

6.若是document有新增或修改,那麼cached bitset會被自動更新

7.之後只要是有相同的filter條件的,會直接來使用這個過濾條件對應的cached bitset


布爾查詢是一種最經常使用的組合查詢方式,布爾查詢把多個子查詢組合(combine)成一個布爾表達式,全部子查詢之間的邏輯關係是與(and);只有當一個文檔知足布爾查詢中的全部子查詢條件時,ElasticSearch引擎才認爲該文檔知足查詢條件。布爾查詢支持的子查詢類型共有四種,分別是:must,should,must_not和filter:

查詢字句 說明 類型
must 文檔必須匹配must查詢條件 數組
should 文檔應該匹配should子句查詢的一個或多個 數組
must_not 文檔不能匹配該查詢條件 數組
filter 過濾器,文檔必須匹配該過濾條件,跟must子句的惟一區別是,filter不影響查詢的score 字典






搜索java,elasticsearch,hadoop,spark關鍵字須要至少匹配2個


本文同步分享在 博客「羊羽」(other)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索