2017-06-13 161 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" 
    } 
    } 
}