elasticsearch 模糊查询中返回不同值的搜索-Elasticsearch
我有一个Elasticsearch模糊查询,如下所示:
elasticsearch 模糊查询中返回不同值的搜索-Elasticsearch,
elasticsearch,lucene,kibana,
elasticsearch,Lucene,Kibana,我有一个Elasticsearch模糊查询,如下所示: GET /resume/candidate/_search { "query": { "fuzzy" : { "name" : { "value": "Tam", "fuzziness" : 2, "max_expansions": 50 } } } } 我的索引中有汤姆、罗伊和麦
GET /resume/candidate/_search
{
"query": {
"fuzzy" : { "name" : {
"value": "Tam",
"fuzziness" : 2,
"max_expansions": 50 }
}
}
}
我的索引中有汤姆、罗伊和麦克斯韦的名字。Tom的名字根据请求匹配,但Roy的名字也会被返回。这是怎么发生的?
全名如下:
洛夫乔伊三世
汤姆·阿特威尔
此外,如果我将模糊度设置为1,则不会得到任何结果。汤姆不应该被匹配,因为只有一个字符是不同的吗
映射:
{
"resume": {
"aliases": {},
"mappings": {
"candidate": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
我也有一个分析器,但它不用于名称字段
分析仪:
"analysis": {
"analyzer": {
"case_insensitive": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
}
“Tam”不是与“roy”的模糊匹配,而是与中间首字母“m”的匹配,其编辑距离为2
在编辑距离为1的“tom”上没有得到结果的原因是,在分析索引名称(因此小写)时,查询不是。您可以将查询小写,也可以使用将被分析的:
"query": {
"match": {
"name": {
"query": "Tam",
"fuzziness": "AUTO"
}
}
}
“Tam”不是与“roy”的模糊匹配,而是与中间首字母“m”的匹配,其编辑距离为2
在编辑距离为1的“tom”上没有得到结果的原因是,在分析索引名称(因此小写)时,查询不是。您可以将查询小写,也可以使用将被分析的:
"query": {
"match": {
"name": {
"query": "Tam",
"fuzziness": "AUTO"
}
}
}
是的,谭应该比赛,罗伊不应该。我认为这与分析
name
属性的方式有关。你能提供你的地图吗?@MohammadMazraeh我已经添加了它们。您现在可以看一下吗?您已经定义了不区分大小写的,但尚未将其添加到映射中。@MohammadMazraeh,将在我稍后定义的字段中使用。是的,Tam应该匹配,Roy不应该匹配。我认为这与分析name
属性的方式有关。你能提供你的地图吗?@MohammadMazraeh我已经添加了它们。现在可以看一下吗?您已经定义了不区分大小写的,但还没有将其添加到映射中。@MohammadMazraeh,它将在我稍后定义的字段中使用。