模糊查询
模糊查询用于搜索包含与搜索词在最大允许的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 | AUTO、0 或正整数 | 在确定术语是否与值匹配时,将一个词更改为另一个词所需的字符编辑(插入、删除、替换)数量。例如,wined 和 wind 之间的距离为 1。默认值 AUTO 根据每个术语的长度选择一个值,是大多数用例的良好选择。 |
max_expansions | 正整数 | 查询可以扩展到的最大术语数量。模糊查询“扩展到”在 fuzziness 中指定的距离内的一些匹配术语。然后 OpenSearch 尝试匹配这些术语。默认值为 50。 |
prefix_length | 非负整数 | 在模糊性中不考虑的前导字符数。默认值为 0。 |
重写 (rewrite) | 字符串 | 确定 OpenSearch 如何重写和评分多词查询。有效值包括 constant_score、scoring_boolean、constant_score_boolean、top_terms_N、top_terms_boost_N 和 top_terms_blended_freqs_N。默认值为 constant_score。 |
transpositions | 布尔型 | 指定是否允许将两个相邻字符(ab 到 ba)的转置作为编辑。默认值为 true。 |
在 max_expansions 中指定一个大值可能会导致性能不佳,特别是当 prefix_length 设置为 0 时,因为 OpenSearch 会尝试匹配大量的词变体。
如果 search.allow_expensive_queries 设置为 false,则模糊查询不会执行。