日常单词拼写错误 - fuzzy 模糊查询
什么是 fuzzy 模糊匹配
- fuzzy 查询是 Elasticsearch 中提供的一种模糊匹配查询类型,用在搜索时容忍一些拼写错误或近似匹配
- 使用 fuzzy 查询,可以根据指定的编辑距离(即词之间不同字符的数量)来模糊匹配查询词
- fuzzy 模糊查询是拼写错误的简单解决方案,但具有很高的 CPU 开销和非常低的精准度
- 用法和 match 基本一致,Fuzzy query 的查询不分词
拓展:编辑距离
是将一个术语转换为另一个术语所需的一个字符更改的次数。比如:
- 更改字符(box → fox)
- 删除字符(black → lack)
- 插入字符(sic → sick)
- 转置两个相邻字符(dgo → dog)
基本语法格式
shell
GET /index/_search
{
"query": {
"fuzzy": {
"field_name": {
"value": "要搜索的词",
"fuzziness": "模糊度"
}
}
}
}解析
- field_name:要进行模糊匹配的字段名。
- value:要搜索的词
- fuzziness 参数指定了模糊度,常见值如下
- 0,1,2
- 指定数字,表示允许的最大编辑距离,较低的数字表示更严格的匹配,较高的数字表示更松散的匹配
- fuziness 的值,表示是针对每个词语而言的,而不是总的错误的数值
- AUTO:Elasticsearch根据词的长度自动选择模糊度
- 如果字符串的长度大于 5,那 funziness 的值自动设置为 2
- 如果字符串的长度小于 2,那么 fuziness 的值自动设置为 0
- 0,1,2
案例
shell
# 指定模糊度2,更松散匹配
GET /shuofeng_shop_v1/_search
{
"query": {
"fuzzy": {
"summary": {
"value": "clo",
"fuzziness": "2"
}
}
}
}
# 指定模糊度1,更严格匹配
GET /shuofeng_shop_v1/_search
{
"query": {
"fuzzy": {
"summary": {
"value": "clo",
"fuzziness": "1"
}
}
}
}
# 使用自动检查,1个单词拼写错误
GET /shuofeng_shop_v1/_search
{
"query": {
"fuzzy": {
"summary": {
"value": "Sprina",
"fuzziness": "auto"
}
}
}
}
朔风