【问题标题】:Search returning different value in fuzzy Query- Elasticsearch搜索在模糊查询中返回不同的值 - Elasticsearch
【发布时间】:2017-11-14 22:45:27
【问题描述】:

我有一个如下的 Elasticsearch 模糊查询:

GET /resume/candidate/_search
{
    "query": {
       "fuzzy" : {  "name" : {
                    "value": "Tam",
                    "fuzziness" :     2,
                    "max_expansions": 50 }
    }
}
}

我的索引中有 Tom、Roy、Maxwell 的名字。根据请求匹配名称 Tom,但也返回名称 Roy。这是怎么回事? 全名是:

罗伊 M 洛夫乔伊三世

汤姆·阿特维尔

另外,如果我将模糊度设置为 1,我不会得到任何结果。不应该匹配 Tom,因为只有 1 个字符不同吗?

映射:

{
  "resume": {
    "aliases": {},
    "mappings": {
      "candidate": {
        "properties": {
          "name": {
            "type": "text"
          }
    }
}
}
}

我也有一个分析器,但在名称字段中没有使用它

分析器:

"analysis": {
          "analyzer": {
            "case_insensitive": {
              "filter": [
                "lowercase"
              ],
              "tokenizer": "keyword"
            }
          }
        }

【问题讨论】:

  • 是的 Tam 应该匹配,而 Roy 不应该匹配。我认为这与您分析 name 属性的方式有关。你能提供你的映射吗?
  • @MohammadMazraeh 我已经添加了它们。现在可以看一下吗?
  • 您已定义 case_insensitive,但尚未将其添加到映射中。
  • @MohammadMazraeh 这将在我稍后定义的字段中使用。

标签: elasticsearch lucene kibana


【解决方案1】:

“Tam”与“roy”不是模糊匹配,而是与中间声母“m”匹配,编辑距离为2。

您没有在编辑距离为 1 的“tom”上获得结果的原因是,当您的索引名称被分析并因此小写时,您的查询不是。您可以将查询小写,也可以使用fuzzy match query,将对其进行分析:

"query": {
  "match": {
    "name": {
      "query":     "Tam",
      "fuzziness": "AUTO"
    }
  }
}

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多