elasticsearch-wildcard、regexp萬用字元與正則表示式查詢
阿新 • • 發佈:2018-12-14
萬用字元與正則表示式查詢
假設將郵編作為 not_analyzed
的精確值欄位索引,所以可以為其建立索引,如下:
PUT /my_index { "mappings": { "address": { "properties": { "postcode": { "type": "string", "index": "not_analyzed" } } } } }
與 prefix
字首查詢的特性類似, wildcard
萬用字元查詢也是一種底層基於詞的查詢,與字首查詢不同的是它允許指定匹配的正則式。它使用標準的 shell 萬用字元查詢: ?
匹配任意字元, *
匹配 0 或多個字元。
這個查詢會匹配包含 W1F 7HW
和 W2F 8HW
的文件:
GET /my_index/address/_search { "query": { "wildcard": { "postcode": "W?F*HW" (1) } } }
-
?
匹配1
和2
,*
與空格及7
和8
匹配。
設想如果現在只想匹配 W
區域的所有郵編,字首匹配也會包括以 WC
開頭的所有郵編,與萬用字元匹配碰到的問題類似,如果想匹配只以 W
開始並跟隨一個數字的所有郵編, regexp
正則式查詢允許寫出這樣更復雜的模式:
GET /my_index/address/_search { "query": { "regexp": { "postcode": "W[0-9].+" (1) } } }
-
這個正則表示式要求詞必須以
W
開頭,緊跟 0 至 9 之間的任何一個數字,然後接一或多個其他字元。
這也意味著需要同樣注意字首查詢存在效能問題,對有很多唯一詞的欄位執行這些查詢可能會消耗非常多的資源,所以要避免使用左通配這樣的模式匹配(如: *foo
或 .*foo
這樣的正則式)。
轉載於:https://blog.csdn.net/chuan442616909/article/details/57910101