模糊查询

模糊查询 #

模糊查询用于搜索包含与搜索词相似的词条的文档,相似度在允许的最大 Damerau-Levenshtein 距离范围内。Damerau-Levenshtein 距离衡量将一个词条变为另一个词条所需的一字符变化的数量。这些变化包括:

  • Replacements: 替换,cat 变为 bat
  • Insertions: 插入,cat 变为 cats
  • Deletions: 删除,cat 变为 at
  • Transpositions: 转换,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"
      }
    }
  }
}

参数说明 #

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

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

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

参数数据类型描述
valueString<field> 指定的字段中搜索的词项。
boostFloat一个浮点数,用于指定该字段对相关性评分的权重。值大于 1.0 会增加字段的相关性。值在 0.0 到 1.0 之间会降低字段的相关性。默认值为 1.0。
fuzzinessAUTO0 或正整数在确定一个词项是否匹配某个值时,将一个词变为另一个词所需的字符编辑次数(插入、删除、替换)。例如, winedwind 之间的距离为 1。默认值 AUTO 会根据每个词项的长度选择一个值,并且对于大多数用例来说是一个不错的选择。
max_expansionsPositive integer查询可以扩展的最大项数。模糊查询会扩展到在指定距离 fuzziness 内的匹配项。然后 Easysearch 尝试匹配这些项。默认值为 50
prefix_lengthPositive integer不考虑在模糊匹配中计算的前导字符数。默认值为 0 。
rewriteString确定 Easysearch 如何重写和评分多词查询。有效值为 constant_scorescoring_booleanconstant_score_booleantop_terms_Ntop_terms_boost_Ntop_terms_blended_freqs_N 。默认值为 constant_score

在 max_expansions 中指定较大的值可能会导致性能下降,特别是在 prefix_length 设置为 0 时,因为 Easysearch 尝试匹配的单词变体数量会很大。

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