模糊查询

编辑

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

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

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

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

示例请求

编辑

简单示例

编辑
resp = client.search(
    query={
        "fuzzy": {
            "user.id": {
                "value": "ki"
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      fuzzy: {
        'user.id' => {
          value: 'ki'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    fuzzy: {
      "user.id": {
        value: "ki",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

使用高级参数的示例

编辑
resp = client.search(
    query={
        "fuzzy": {
            "user.id": {
                "value": "ki",
                "fuzziness": "AUTO",
                "max_expansions": 50,
                "prefix_length": 0,
                "transpositions": True,
                "rewrite": "constant_score_blended"
            }
        }
    },
)
print(resp)
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
const response = await client.search({
  query: {
    fuzzy: {
      "user.id": {
        value: "ki",
        fuzziness: "AUTO",
        max_expansions: 50,
        prefix_length: 0,
        transpositions: true,
        rewrite: "constant_score_blended",
      },
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki",
        "fuzziness": "AUTO",
        "max_expansions": 50,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score_blended"
      }
    }
  }
}

fuzzy 的顶层参数

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

<字段> 的参数

编辑
value
(必需,字符串)您希望在提供的 <字段> 中查找的词项。
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,则不会执行模糊查询。