在模糊查询中搜索返回不同的值 - 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"
    }
  }
}