当前位置 - 股票行情交易網 - 財經資訊 - elasticsearch基本查詢筆記(三)-- es查詢總結

elasticsearch基本查詢筆記(三)-- es查詢總結

term 查詢是簡單查詢,接受壹個字段名和參數,進行精準查詢,類似sql中:

ES中對應的DSL如下:

在ES5.x及以上版本,字符串類型需設置為keyword或text類型,根據類型來進行精確值匹配。

當進行精確值查詢,可以使用過濾器,因為過濾器的執行非常快,不會計算相關度(ES會計算查詢評分),且過濾器查詢結果容易被緩存。

bool過濾器組成部分:

當我們需要多個過濾器時,只須將它們置入 bool 過濾器的不同部分即可。

terms是包含的意思,如下:

name包含["奧尼爾","麥迪"]

返回結果:

range查詢可同時提供包含(inclusive)和不包含(exclusive)這兩種範圍表達式,可供組合的選項如下:

類似sql中的範圍查詢:

ES中對應的DSL如下:

如下sql,age不為null:

ES中對應的DSL如下:

如下sql,age為null:

ES中對應的DSL如下:

註:missing查詢在5.x版本已經不存在。

匹配包含 not analyzed(未分詞分析)的前綴字符:

匹配具有匹配通配符表達式( (not analyzed )的字段的文檔。 支持的通配符:

1) * 它匹配任何字符序列(包括空字符序列);

2) ? 它匹配任何單個字符。

請註意,此查詢可能很慢,因為它需要遍歷多個術語。

為了防止非常慢的通配符查詢,通配符不能以任何壹個通配符*****或 ? 開頭。

正則表達式查詢允許您使用正則表達式術語查詢。

舉例如下:

註意: * 的匹配會非常慢,妳需要使用壹個長的前綴,

通常類似.*?+通配符查詢的正則檢索性能會非常低。

模糊查詢查找在模糊度中指定的最大編輯距離內的所有可能的匹配項,然後檢查術語字典,以找出在索引中實際存在待檢索的關鍵詞。

舉例:

檢索索引test_index中,type為user的全部信息。不過在 es6.x 版本,壹個index僅有壹個type,未來 es7.x 版本,將取消type,所以這個查詢沒啥意義。

返回指定id的全部信息。

全文檢索查詢,是通過分析器,對查詢條件進行分析,然後在全文本字段進行全文查詢。

全文搜索取決於mapping中設定的analyzer(分析器),這裏使用的是ik分詞器。

所以在進行查詢開發時候,需要先了解index的mapping,從而選擇查詢方式。

匹配查詢接受文本/數字/日期類型,分析它們,並構造查詢。

對查詢傳入參數進行分詞,搜索詞語相同文檔。

match_phrase查詢分析文本,並從分析文本中創建短語查詢。

用戶已經漸漸習慣在輸完查詢內容之前,就能為他們展現搜索結果,這就是所謂的即時搜索(instant search) 或輸入即搜索(search-as-you-type) 。

不僅用戶能在更短的時間內得到搜索結果,我們也能引導用戶搜索索引中真實存在的結果。

例如,如果用戶輸入 johnnie walker bl ,我們希望在它們完成輸入搜索條件前就能得到: Johnnie Walker Black Label 和 Johnnie Walker Blue Label 。

match_phrase_prefix與match_phrase相同,除了它允許文本中最後壹個術語的前綴匹配。