elasticsearch中模糊查询的一些奇怪问题

Some weird problem with fuzzy query in elasticsearch

我在 es 中有一个文档

        "_type": "_doc",
        "_id": "109487",
        "_score": null,
        "_source": {
          "id": "109487",
          "title": "Interstellar",
          "year": 2014,
          "genre": [
            "Sci-Fi",
            "IMAX"
          ]
        },
        "sort": [
          "Interstellar"
        ]
      }

我正在使用类似

的模糊查询进行搜索
{
    "query": {
        "fuzzy": {
            "title": {"value": "intersteller", "fuzziness": 1}
        }
    }
}

但奇怪的是,如果我在 intersteller 中使用小 i 进行搜索,那么我将获得标题为 Interstellar 的所需记录,但如果我使用 Capital I 进行搜索即如果我的查询是

    "query": {
        "fuzzy": {
            "title": {"value": "Intersteller", "fuzziness": 1}
        }
    }
}

然后我没有从 db 获取和文档 .. 只是想了解幕后发生的事情

模糊查询不分析文本。大多数模糊查询就像术语查询本身。

在您的情况下 "title" 字段必须使用 standard analyzer。所以 "Intersteller" 被索引为 "intersteller"。现在,当您对 "intersteller" 执行模糊查询时,您将获得结果,但不会使用 "Intersteller"

要了解更多有关模糊查询的信息,请参阅此elasticsearch blog


最好连同模糊参数一起使用match query

{
  "query": {
    "match": {
      "title": {
        "query": "Intersteller",
        "fuzziness": "auto"
      }
    }
  }
}

如果你想使用模糊查询,那么你需要增加fuzziness参数,让你的文档匹配

{
  "query": {
    "fuzzy": {
      "title": {
        "value": "Intersteller",
        "fuzziness": 3
      }
    }
  }
}