Skip to content
章节导航

日常单词拼写错误 - 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

案例

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"
      }
    }
  }
}