Link Search Menu Expand Document Documentation Menu

模糊查询

模糊查询用于搜索包含与搜索词在最大允许的Damerau–Levenshtein 距离内的相似术语的文档。Damerau–Levenshtein 距离衡量将一个术语更改为另一个术语所需的一个字符更改的数量。这些更改包括

  • 替换:cat 到 bat
  • 插入:cat 到 cats
  • 删除:cat 到 at
  • 转置:cat 到 act

模糊查询会创建搜索词在 Damerau-Levenshtein 距离内的所有可能扩展列表。您可以在 max_expansions 字段中指定此类扩展的最大数量。然后,查询会搜索与任何扩展匹配的文档。如果您将 transpositions 参数设置为 false,则您的搜索将使用经典的 Levenshtein 距离

以下示例查询搜索发言人 HALET(拼写错误为 HAMLET)。未指定最大编辑距离,因此使用默认的 AUTO 编辑距离

GET shakespeare/_search
{
  "query": {
    "fuzzy": {
      "speaker": {
        "value": "HALET"
      }
    }
  }
}

响应包含所有 HAMLET 作为发言人的文档。

以下示例查询使用高级参数搜索词 HALET

GET shakespeare/_search
{
  "query": {
    "fuzzy": {
      "speaker": {
        "value": "HALET",
        "fuzziness": "2",
        "max_expansions": 40,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score"
      }
    }
  }
}

参数

查询接受字段名称 (<field>) 作为顶级参数

GET _search
{
  "query": {
    "fuzzy": {
      "<field>": {
        "value": "sample",
        ...
      }
    }
  }
}

<field> 接受以下参数。除 value 外,所有参数都是可选的。

参数 数据类型 描述
字符串 要在 <field> 中指定的字段中搜索的术语。
提升 浮点数 一个浮点值,指定此字段对相关性得分的权重。高于 1.0 的值会增加字段的相关性。介于 0.0 和 1.0 之间的值会降低字段的相关性。默认值为 1.0。
fuzziness AUTO0 或正整数 在确定术语是否与值匹配时,将一个词更改为另一个词所需的字符编辑(插入、删除、替换)数量。例如,winedwind 之间的距离为 1。默认值 AUTO 根据每个术语的长度选择一个值,是大多数用例的良好选择。
max_expansions 正整数 查询可以扩展到的最大术语数量。模糊查询“扩展到”在 fuzziness 中指定的距离内的一些匹配术语。然后 OpenSearch 尝试匹配这些术语。默认值为 50
prefix_length 非负整数 在模糊性中不考虑的前导字符数。默认值为 0
重写 (rewrite) 字符串 确定 OpenSearch 如何重写和评分多词查询。有效值包括 constant_scorescoring_booleanconstant_score_booleantop_terms_Ntop_terms_boost_Ntop_terms_blended_freqs_N。默认值为 constant_score
transpositions 布尔型 指定是否允许将两个相邻字符(abba)的转置作为编辑。默认值为 true

max_expansions 中指定一个大值可能会导致性能不佳,特别是当 prefix_length 设置为 0 时,因为 OpenSearch 会尝试匹配大量的词变体。

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

剩余 350 字符

有问题?

想贡献?