Elasticsearch WildcardQuery 檢索總結

現在使用Es版本為5+,經常有人放映 match不生效。

String 字段

es 2+版本 String 是字符串字段。

5.*之後,把string字段設置為了過時字段,引入text,keyword字段

這兩個字段都可以存儲字符串使用,但建立索引和搜索的時候是不太一樣的

keyword:存儲數據時候,不會分詞建立索引。

text:存儲數據時候,會自動分詞,並生成索引(這是很智能的,但在有些字段裡面是沒用的,所以對於有些字段使用text則浪費了空間)。

match進行匹配的

使用term匹配的時候,主要是確定詞匹配 keyword或者 integer類型,可以是數組。

Wildcard Query

匹配具有與通配符表達式匹配的字段(not analyzed)的文檔。支持的通配符是*,它匹配任何字符序列(包括空字符序列)和?,它匹配任何單個字符。請注意,此查詢可能很慢,因為它需要迭代多個術語。為了防止極慢的通配符查詢,通配符術語不應該以通配符*或?之一開頭。通配符查詢映射到Lucene WildcardQuery。

GET /_search
{
 "query": {
 "wildcard" : { "user" : "ki*y" }
 }
}

wildcard 在生產環境使用時會有性能問題。建議大家使用分詞方式。


分享到:


相關文章: