模糊查询编辑

返回包含与搜索词语相似的词语的文档,相似度由 莱文斯坦编辑距离 衡量。

编辑距离是指将一个词语转换为另一个词语所需的单字符更改次数。这些更改可能包括

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

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

示例请求编辑

简单示例编辑

response = client.search(
  body: {
    query: {
      fuzzy: {
        'user.id' => {
          value: 'ki'
        }
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

使用高级参数的示例编辑

response = client.search(
  body: {
    query: {
      fuzzy: {
        'user.id' => {
          value: 'ki',
          fuzziness: 'AUTO',
          max_expansions: 50,
          prefix_length: 0,
          transpositions: true,
          rewrite: 'constant_score_blended'
        }
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki",
        "fuzziness": "AUTO",
        "max_expansions": 50,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score_blended"
      }
    }
  }
}

fuzzy 的顶级参数编辑

<field>
(必需,对象) 您要搜索的字段。

<field> 的参数编辑

value
(必需,字符串) 您希望在提供的 <field> 中找到的词语。
fuzziness
(可选,字符串) 允许的匹配最大编辑距离。有关有效值和更多信息,请参见 模糊度
max_expansions

(可选,整数) 创建的最大变体数量。默认为 50

避免在 max_expansions 参数中使用高值,尤其是在 prefix_length 参数值为 0 的情况下。由于检查的变体数量过多,max_expansions 参数中的高值会导致性能下降。

prefix_length
(可选,整数) 创建扩展时保持不变的开头字符数量。默认为 0
transpositions
(可选,布尔值) 指示编辑是否包含两个相邻字符的交换 (ab → ba)。默认为 true
rewrite
(可选,字符串) 用于重写查询的方法。有关有效值和更多信息,请参见 rewrite 参数

备注编辑

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