WildCard
GET /people/_search { "query":{ "wildcard":{ "firstName":"japa*" } } }
上面的可以使用問號和星號兩個形式的查詢,下面是解釋:
?
, which matches any single character 匹配任意個字符
*
, which can match zero or more characters, including an empty one,翻譯:可以匹配0個或多個字符,包含空字符
Fuzzy
GET /people/_search { "query":{ "fuzzy":{ "firstName":"japen" } } }
japen可以匹配到japan,即使有一個字符不一樣,也可以匹配出來
Regexp
假設您只想匹配以W開頭,緊跟着數字的郵政編碼。使用regexp查詢能夠讓你寫下更復雜的模式:備注:這個正則最好是用到不分詞的字段里,如果做過分詞以后就只能對分詞后的詞組或詞進行搜索,意義就不大了。
GET /my_index/address/_search { "query": { "regexp": { "postcode": "W[0-9].+" } } }
GET /person_index/_search { "query":{ "regexp":{ "postCode": { "value":"W.*" } } } }
匹配手機號:
GET /person_index/_search { "query":{ "regexp":{ "address": { "value":"1[35678][0-9]{9}" } } } }
這個正則表達式的規定了詞條需要以W開頭,緊跟着一個0到9的數字,然后是一個或者多個其它字符。
下面例子是所有以 wxopen 開頭的正則
{ "query": { "regexp": { "hostname": "wxopen.*" } } }
prefix
以什么字符開頭的,可以更簡單地用 prefix,如下面的例子
GET /_search { "query": { "prefix": { "user": { "value": "ki" } } } }
或者
GET /_search { "query": { "prefix" : { "user" : "ki" } } }