在模糊查询中搜索返回不同的值 - Elasticsearch
Search returning different value in fuzzy Query- Elasticsearch
我有一个 Elasticsearch 模糊查询如下:
GET /resume/candidate/_search
{
"query": {
"fuzzy" : { "name" : {
"value": "Tam",
"fuzziness" : 2,
"max_expansions": 50 }
}
}
}
我的索引中有汤姆、罗伊和麦克斯韦的名字。名字 Tom 根据请求匹配,但名字 Roy 也被返回。这是怎么回事?
全名是:
罗伊·洛夫乔伊三世
汤姆·阿特维尔
此外,如果我将模糊度设置为 1,我不会得到任何结果。 Tom 不应该被匹配,因为只有 1 个字符不同吗?
映射:
{
"resume": {
"aliases": {},
"mappings": {
"candidate": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
我也有一个分析器,但在名称字段中没有使用
分析器:
"analysis": {
"analyzer": {
"case_insensitive": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
}
"Tam"不是与"roy"的模糊匹配,而是与中间首字母"m"的匹配,编辑距离为2.
您在 "tom" 上没有得到编辑距离为 1 的结果的原因是,虽然您的索引名称正在被分析并因此被小写,但您的查询却没有。你可以小写你的查询,或者你可以使用 fuzzy match query,这将被分析:
"query": {
"match": {
"name": {
"query": "Tam",
"fuzziness": "AUTO"
}
}
}
我有一个 Elasticsearch 模糊查询如下:
GET /resume/candidate/_search
{
"query": {
"fuzzy" : { "name" : {
"value": "Tam",
"fuzziness" : 2,
"max_expansions": 50 }
}
}
}
我的索引中有汤姆、罗伊和麦克斯韦的名字。名字 Tom 根据请求匹配,但名字 Roy 也被返回。这是怎么回事? 全名是:
罗伊·洛夫乔伊三世
汤姆·阿特维尔
此外,如果我将模糊度设置为 1,我不会得到任何结果。 Tom 不应该被匹配,因为只有 1 个字符不同吗?
映射:
{
"resume": {
"aliases": {},
"mappings": {
"candidate": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
我也有一个分析器,但在名称字段中没有使用
分析器:
"analysis": {
"analyzer": {
"case_insensitive": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
}
"Tam"不是与"roy"的模糊匹配,而是与中间首字母"m"的匹配,编辑距离为2.
您在 "tom" 上没有得到编辑距离为 1 的结果的原因是,虽然您的索引名称正在被分析并因此被小写,但您的查询却没有。你可以小写你的查询,或者你可以使用 fuzzy match query,这将被分析:
"query": {
"match": {
"name": {
"query": "Tam",
"fuzziness": "AUTO"
}
}
}