2017-06-13 158 views
0

返回不同的值,我有如下的Elasticsearch模糊查詢:搜索模糊查詢 - Elasticsearch

GET /resume/candidate/_search 
{ 
    "query": { 
     "fuzzy" : { "name" : { 
        "value": "Tam", 
        "fuzziness" :  2, 
        "max_expansions": 50 } 
    } 
} 
} 

我的名字湯姆·羅伊,麥克斯韋在我的指數。名字湯姆匹配根據請求,但名字羅伊也被返回。這是怎麼發生的? 的全名是:

羅伊中號洛夫喬伊III

湯姆Atwell的

另外,如果我的模糊性設置爲1,我沒有得到任何結果。湯姆不應該匹配,因爲只有1個字符是不同的?

映射:

{ 
    "resume": { 
    "aliases": {}, 
    "mappings": { 
     "candidate": { 
     "properties": { 
      "name": { 
      "type": "text" 
      } 
    } 
} 
} 
} 

我也有一個分析器,但它未在名稱字段中使用

分析器:

"analysis": { 
      "analyzer": { 
      "case_insensitive": { 
       "filter": [ 
       "lowercase" 
       ], 
       "tokenizer": "keyword" 
      } 
      } 
     } 
+0

是譚應該匹配和羅伊不應該。我認爲這與你的'name'屬性被分析的方式有關。你能提供你的映射嗎? –

+0

@MohammadMazraeh我已經添加了它們。你現在可以看看嗎? – Sid1199

+0

你已經定義了'case_insensitive',但你還沒有將它添加到你的映射中。 –

回答

2

「擔」 不是一個模糊匹配與「roy」,它與中間最初的「m」匹配,其編輯距離爲2.

原因y ou沒有在編輯距離爲1的「tom」上得到結果,這是因爲,當您的索引名稱被分析時,因此小寫,您的查詢不是。你可以小寫你的查詢,或者你可以使用一個fuzzy match query,這將被分析:

"query": { 
    "match": { 
    "name": { 
     "query":  "Tam", 
     "fuzziness": "AUTO" 
    } 
    } 
}