ElasticSearch 打错字还能搜索到?试试 fuzzy query!

2年前 (2022) 程序员胖胖胖虎阿
250 0 0

松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程


今天周末,咱们来学习一个简单的词项查询,也就是 term 查询。在本系列之前的文章中,我们已经多次涉及到这个技能点,但是没有细讲,今天我们就来从头理一下 term 查询。

词项查询:

如果大家觉得视频风格还能接受,也可以看看松哥的付费视频:Spring Boot+Vue+微人事视频教程

以下是视频笔记:

注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。

16.1 term query

词项查询。词项查询不会分析查询字符,直接拿查询字符去倒排索引中比对。

GET books/_search
{
  "query": {
    "term": {
      "name""程序设计"
    }
  }
}

16.2 terms query

词项查询,但是可以给多个关键词。

GET books/_search
{
  "query": {
    "terms": {
      "name": ["程序","设计","java"]
    }
  }
}

16.3 range query

范围查询,可以按照日期范围、数字范围等查询。

range query 中的参数主要有四个:

  • gt
  • lt
  • gte
  • lte

案例:

GET books/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lt": 20
      }
    }
  },
  "sort": [
    {
      "price": {
        "order""desc"
      }
    }
  ]
}

16.4 exists query

exists query 会返回指定字段中至少有一个非空值的文档:

GET books/_search
{
  "query": {
    "exists": {
      "field""javaboy"
    }
  }
}

注意,空字符串也是有值。null 是空值。

16.5 prefix query

前缀查询,效率略低,除非必要,一般不太建议使用。

给定关键词的前缀去查询:

GET books/_search
{
  "query": {
    "prefix": {
      "name": {
        "value""大学"
      }
    }
  }
}

16.6 wildcard query

wildcard query 即通配符查询。支持单字符和多字符通配符:

  • ?表示一个任意字符。
  • * 表示零个或者多个字符。

查询所有姓张的作者的书:

GET books/_search
{
  "query": {
    "wildcard": {
      "author": {
        "value""张*"
      }
    }
  }
}

查询所有姓张并且名字只有两个字的作者的书:

GET books/_search
{
  "query": {
    "wildcard": {
      "author": {
        "value""张?"
      }
    }
  }
}

16.7 regexp query

支持正则表达式查询。

查询所有姓张并且名字只有两个字的作者的书:

GET books/_search
{
  "query": {
    "regexp": {
      "author""张."
    }
  }
}

16.8 fuzzy query

在实际搜索中,有时我们可能会打错字,从而导致搜索不到,在 match query 中,可以通过 fuzziness 属性实现模糊查询。

fuzzy query 返回与搜索关键字相似的文档。怎么样就算相似?以LevenShtein 编辑距离为准。编辑距离是指将一个字符变为另一个字符所需要更改字符的次数,更改主要包括四种:

  • 更改字符(javb--〉java)
  • 删除字符(javva--〉java)
  • 插入字符(jaa--〉java)
  • 转置字符(ajva--〉java)

为了找到相似的词,模糊查询会在指定的编辑距离中创建搜索关键词的所有可能变化或者扩展的集合,然后进行搜索匹配。

GET books/_search
{
  "query": {
    "fuzzy": {
      "name""javba"
    }
  }
}

16.9 ids query

根据指定的 id 查询。

GET books/_search
{
  "query": {
    "ids":{
      "values":  [1,2,3]
    }
  }
}

ElasticSearch 系列其他文章:

  1. 打算出一个 ElasticSearch 教程,谁赞成,谁反对?
  2. ElasticSearch 从安装开始
  3. ElasticSearch 第三弹,核心概念介绍
  4. ElasticSearch 中的中文分词器该怎么玩?
  5. ElasticSearch 索引基本操作
  6. ElasticSearch 文档的添加、获取以及更新
  7. ElasticSearch 文档的删除和批量操作
  8. ElasticSearch 文档路由,你的数据到底存在哪一个分片上?
  9. ElasticSearch 并发的处理方式:锁和版本控制
  10. ElasticSearch 中的倒排索引到底是什么?
  11. ElasticSearch 动态映射与静态映射
  12. ElasticSearch 四种字段类型详解
  13. ElasticSearch 中的地理类型和特殊类型
  14. ElasticSearch 23 种映射参数详解
  15. ElasticSearch 如何配置某个字段的权重?
  16. ElasticSearch 23 种映射参数详解【3】
  17. ElasticSearch 映射模版
  18. ElasticSearch 搜索入门
  19. ElasticSearch 全文搜索怎么玩?






往期推荐
0
1

50+ 需求文档免费下载!

0
2

Spring Security 教程合集

0
3

接了两个私活,都是血汗钱

ElasticSearch 打错字还能搜索到?试试 fuzzy query!

本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

相关文章

暂无评论

暂无评论...