为什么它匹配一个词的一部分而不是整个词?

Why does it match on part of a word but not the whole word?

我有一个索引,其中包含名为 属性 的文档。我的目标文档具有以下值:"name" : "Eiker Football Team Crows"。因为它是一个地区,所以有很多名字中有“Eiker”。搜索 Football Team 会找到该文档,eik football team 甚至 eike 也会找到该文档(尽管它也会找到其他文档)。真正奇怪的是,Eiker 找到 NONE 个包含该词的文档,但确实建议使用 EkerEikeland 等排列。按照我要查找的文档的字面意思搜索完整的正确拼写和大小写的名称,但没有找到它。

这是我在 Kibana 开发人员中编写的尝试执行的搜索:

GET orgs/_search
{
  "query": {
    "match": {
      "name": {
        "query": "eiker",
        "operator": "and",
        "fuzziness": "auto",
        "max_expansions": 5,
        "prefix_length": 0
      }
    }
  }
}

为什么我的 Elastic 搜索讨厌 r

我尝试过不同的扩展值或前缀值。或者 or 而不是 and 运算符。

你的问题的简单答案是你正在使用 fuzziness 所以它也会进行模糊匹配。请检查 this 文档。

fuzziness allows fuzzy matching based on the type of field being queried.

此外,Elasticsearch return 默认情况下仅显示前 10 个结果。如果您想获得更多结果,请将 size 参数值设置为大数。

更新:

根据您的评论,您正在使用 autocomplete 作为索引时间分析器,使用 autocomplete_search 作为搜索时间分析器,这就是结果没有出现的原因。使用在索引时用于 name 字段的相同分析器尝试以下查询,结果应该是 return。 (请添加问题中的索引映射和分析器设置,以便轻松回答问题)

POST sampleindex/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": {
              "query": "Eiker",
              "operator": "and",
              "fuzziness": "auto",
              "max_expansions": 5,
              "prefix_length": 0,
              "analyzer": "autocomplete"
            }
          }
        }
      ]
    }
  }
}