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

轉載自服務號【銘毅天下】 mysql

Elasticsearch中當咱們設置Mapping(分詞器、字段類型)完畢後,就能夠按照設定的方式導入數據。 正則表達式

有了數據後,咱們就須要對數據進行檢索操做。根據實際開發須要,每每咱們須要支持包含但不限於如下類型的檢索:
1)精確匹配,相似mysql中的 「=」操做;
2)模糊匹配,相似mysql中的」like %關鍵詞% 「查詢操做;
3)前綴匹配;
4)通配符匹配;
5)正則表達式匹配;
6)跨索引匹配;
7)提高精讀匹配。sql

細數一下,咱們的痛點在於:
1)ES究竟支持哪些檢索操做?緩存

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

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

0、檢索概覽
檢索子句的行爲取決於查詢應用於過濾(filter)上下文仍是查詢/分析(query)上下文。性能

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

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

3)過濾器上下文主要用於過濾結構化數據。相似於Mysql中斷定某個字段是否存在:
例如: 開發

時間戳字段:是否屬於2015年或2016年?

狀態字段:是否設置爲「已發佈」?

常常使用的過濾器將被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」的所有信息。

如下,以「腦圖」的形式直觀展現檢索分類。
Elasticsearch檢索分類深刻詳解—基礎篇
其中,3-7隨着我開發深刻再作更新。

請點擊左下方的「閱讀原文」,進入個人博客,查看每種子類型檢索的詳情。

閱讀原文

相關文章
相關標籤/搜索