1. 程式人生 > 其它 >Elasticsearch檢索分類深入詳解—基礎篇

Elasticsearch檢索分類深入詳解—基礎篇

Elasticsearch中當我們設定Mapping(分詞器、欄位型別)完畢後,就可以按照設定的方式匯入資料。

有了資料後,我們就需要對資料進行檢索操作。根據實際開發需要,往往我們需要支援包含但不限於以下型別的檢索: 1)精確匹配,類似mysql中的 “=”操作; 2)模糊匹配,類似mysql中的”like %關鍵詞% “查詢操作; 3)字首匹配; 4)萬用字元匹配; 5)正則表示式匹配; 6)跨索引匹配; 7)提升精讀匹配。

細數一下,我們的痛點在於: 1)ES究竟支援哪些檢索操作?

2)如何實現ES精確值檢索、指定索引檢索、全文檢索?

這些就是本文著重參考ES最新官方文件,針對ES5.X版本探討的內容。

0、檢索概覽

檢索子句的行為取決於查詢應用於過濾(filter)上下文還是查詢/分析(query)上下文。

過濾上下文——對應於結構化檢索 1)核心回答的問題是:“這個文件是否符合這個查詢條款?

2)答案是簡單的是或否,不計算分數。

3)過濾器上下文主要用於過濾結構化資料。類似於Mysql中判定某個欄位是否存在: 例如:

  1. 時間戳欄位:是否屬於2015年或2016年?
  2. 狀態欄位:是否設定為“已釋出”?

經常使用的過濾器將被Elasticsearch自動快取,以加快效能。

分析上下文——對應於全文檢索 1)核心回答了“本文件與此查詢子句是否匹配?”的問題。

2)除了決定文件是否匹配之外,查詢子句還會計算一個_score,表示文件與其他文件的匹配程度。

綜合應用場景如下:

GET /_search
{  "query": {  "bool": {  "must": [
  { "match": { "title": "Search" }},
  { "match": { "content": "Elasticsearch" }}
  ],  "filter": [
  { "term": { "status": "published" }},
  { "range": { "publish_date": { "gte": "2015-01-01" }}}
  ]
  }
  }
}

以上檢索,title中包含"Search”並且content中包含 “Elasticsearch”,status中精確匹配”published”,並且publish_date 大於“2015-01-01”的全部資訊。

以下,以“腦圖”的形式直觀展示檢索分類。

其中,3-7隨著我開發深入再做更新。