原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-fuzzy-query.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl-fuzzy-query.html

模糊查询 (fuzzy query)

根据莱温斯坦编辑距离,返回包含与搜索词相似的词项的文档。

编辑距离是将一个词转换成另一个词所需的单个字符的变化次数。这些变化包括:

  • 改变一个字符 (box → fox)
  • 删除一个字符 (black → lack)
  • 插入一个字符 (sic → sick)
  • 调换两个相邻的字符 (act → cat)

为了找到相似的词,fuzzy 查询在指定的编辑距离内创建搜索词的所有可能变化或扩展的集合。 然后,该查询返回每个扩展的精确匹配。

请求示例

一个简单的例子

GET /_search
{
    "query": {
        "fuzzy": {
            "user": {
                "value": "ki"
            }
        }
    }
}

一个使用高级参数的例子

GET /_search
{
    "query": {
        "fuzzy": {
            "user": {
                "value": "ki",
                "fuzziness": "AUTO",
                "max_expansions": 50,
                "prefix_length": 0,
                "transpositions": true,
                "rewrite": "constant_score"
            }
        }
    }
}

fuzzy的顶级参数

<field>
(必需, object) 你想搜索的字段。

<field>的参数

value
(必需, string) 你想在指定的<field>中搜索的词。
fuzziness
(可选, string) 匹配允许的最大编辑距离。有效值及更多信息请参考 模糊性
max_expansions

(可选, integer) 可创建的最大变形词的数量。 默认为 50

避免在 max_expansions 参数中使用很大的值,尤其是当 prefix_length 参数值为 0 时。 一个很大的 max_expansions 参数值可能会导致性能下降,因为要检查大量的变形词。

prefix_length
(可选, integer) 创建扩展时,开头字符保持不变的数量。默认为 0
transpositions
(可选, boolean) 指示编辑是否包括两个相邻字符的换位 (ab → ba)。默认为 true
rewrite
(可选, string) 用于重写查询的方法。 有效值及更多信息请参考 rewrite 参数

注意

如果 search.allow_expensive_queries 设置为false,将不会执行模糊查询。