1. 程式人生 > >Elasticsearch-字首、萬用字元、正則、模糊搜尋詳解

Elasticsearch-字首、萬用字元、正則、模糊搜尋詳解

1.對於字首的匹配搜尋:

GET /forum/article/_search
{
  "query": {
    "prefix": {
      "articleID": {
        "value": "J"
      }
    }
  }
}

prefix的匹配一般是處理不分詞的場景,將會匹配articleID中以”J”開頭的doc。prefix不會計算revelance score,只是作一個過濾的操作,和filter唯一的區別是filter會快取結果,而prefix不會。字首越短要處理的doc越多,效能越差。

2.對於萬用字元的搜尋:

GET /forum/article/_search
{
  "query"
: { "wildcard": { "content": { "value": "*k" } } } }

?會匹配任意字元,*會匹配0個或多個字元。效能根prefix一樣差,必須要掃描整個倒排索引。

3.對於正則的搜尋:

GET /forum/article/_search
{
  "query": {
    "regexp":{
      "content":"thi[n]."
    }
  }
}

[0-9]:指定範圍內的數字
[a-z]:指定範圍內的字幕
.:一個字元
+:前面的正則表示式可以出現一次或多次

正則的搜尋同樣會掃描全表,效能也會很差

4.對於模糊搜尋:

GET /forum/article/_search
{
  "query": {
    "fuzzy": {
      "author_first_name": {
        "value": "tony",
        "fuzziness": 2
      }
    }
  }
}

fuzziness引數調整糾正的次數

通常不會直接用上述搜尋,而會用下面的搜尋:

GET /forum/article/_search
{
  "query": {
    "match": {
      "author_first_name": {
        "query"
: "tonyn", "fuzziness": "AUTO", "operator": "and" } } } }