Elasticsearch模糊查詢

前綴查詢

匹配包含具備指定前綴的項(not analyzed)的字段的文檔。前綴查詢對應 Lucene 的 PrefixQuery 。html

案例
GET /_search
{ "query": {
    "prefix" : { "user" :  { "value" : "ki", "boost" : 2.0 } }
  }
}

正則表達式查詢

regexp (正則表達式)查詢容許您使用正則表達式進行項查詢。有關支持的正則表達式語言的詳細信息,請參閱正則表達式語法。第一個句子中的 「項查詢」 意味着 Elasticsearch 會將正則表達式應用於由該字段生成的項,而不是字段的原始文本。正則表達式

注意: regexp (正則表達式)查詢的性能很大程度上取決於所選的正則表達式。匹配一切像 「.*」 ,是很是慢的,使用回顧正則表達式也是如此。若是可能,您應該嘗試在正則表達式開始以前使用長前綴。通配符匹配器 「.*?+」 將主要下降性能。elasticsearch

案例
GET /_search
{
    "query": {
        "regexp":{
            "name.first":{
                "value":"s.*y",
                "boost":1.2
            }
        }
    }
}

通配符查詢

匹配與通配符表達式具備匹配字段的文檔(not analyzed)。支持的通配符是 「*」,它匹配任何字符序列(包括空字符);還有 「?」,它匹配任何單個字符。請注意,此查詢可能很慢,由於它須要迭代多個項。爲了防止極慢的通配符查詢,通配符項不該以通配符 「*」 或 「?」 開頭。通配符查詢對應 Lucene 的 WildcardQuery ide

案例
GET /_search
{
    "query": {
        "wildcard" : { "user" : { "value" : "ki*y", "boost" : 2.0 } }
    }
}

 

###模糊查詢數據量越大效率越低,當查詢內容較多,數據量較大時建議將該字段設置成text進行分詞,而後經過match進行匹配。性能

相關文章
相關標籤/搜索