模糊查询
模糊查询用于搜索包含与搜索词在最大允许的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
,则模糊查询不会执行。