我有一个Elasticsearch模糊查询如下:
Use of undefined constant i - assumed 'i'
我的索引中有Tom,Roy,Maxwell的名字。汤姆的名称根据请求进行匹配,但名称Roy也会被退回。这是怎么回事? 全名是:
Roy M Lovejoy III
Tom Atwell
另外,如果我将模糊性设置为1,我没有得到任何结果。汤姆不应该匹配,因为只有1个字符不同吗?
映射:
GET /resume/candidate/_search
{
"query": {
"fuzzy" : { "name" : {
"value": "Tam",
"fuzziness" : 2,
"max_expansions": 50 }
}
}
}
我也有一个分析器,但它没有在名称字段中使用
分析仪:
{
"resume": {
"aliases": {},
"mappings": {
"candidate": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
答案 0 :(得分:2)
“Tam”与“roy”不是模糊匹配,它与中间的初始“m”匹配,编辑距离为2.
你没有在编辑距离为1的“tom”上得到结果的原因是因为,当您的索引名称被分析,因此小写时,您的查询不是。您可以小写查询,也可以使用fuzzy match query进行分析:
"query": {
"match": {
"name": {
"query": "Tam",
"fuzziness": "AUTO"
}
}
}