ElasticSearch 搜索入门

1年前 (2023) 程序员胖胖胖虎阿
113 0 0

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


经过近一个月的铺垫,ElastiSearch 系列终于进入搜索环节啦!

搜索是 ElasticSearch 最为丰富有趣的功能,这一块松哥将从全文查询、词项查询、复合查询、嵌套查询、位置查询、特殊查询等多个方面来和大家逐一剖析 ElasticSearch 中搜索的玩法!今天我们就先来看一个简单的搜索入门。

本文是ElasticSearch 系列第 18 篇,和大家聊一聊索引的基本操作,前 17 篇传送门:

  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 映射模版

搜索数据导入:

搜索入门:

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

以下是视频笔记:

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

13.ElasticSearch 搜索数据导入

  1. 在微信公众号后台回复 bookdata.json 下载脚本。

  2. 创建索引:

   PUT books
   {
     "mappings": {
       "properties": {
         "name":{
           "type""text",
           "analyzer""ik_max_word"
         },
         "publish":{
           "type""text",
           "analyzer""ik_max_word"
         },
         "type":{
           "type""text",
           "analyzer""ik_max_word"
         },
         "author":{
           "type""keyword"
         },
         "info":{
           "type""text",
           "analyzer""ik_max_word"
         },
         "price":{
           "type""double"
         }
       }
     }
   }

执行如下脚本导入命令:

curl -XPOST "http://localhost:9200/books/_bulk?pretty" -H "content-type:application/json" --data-binary @bookdata.json

14.ElasticSearch 搜索入门

搜索分为两个过程:

  1. 当向索引中保存文档时,默认情况下,es 会保存两份内容,一份是
    _source  中的数据,另一份则是通过分词、排序等一系列过程生成的倒排索引文件,倒排索引中保存了词项和文档之间的对应关系。
  2. 搜索时,当 es 接收到用户的搜索请求之后,就会去倒排索引中查询,通过的倒排索引中维护的倒排记录表找到关键词对应的文档集合,然后对文档进行评分、排序、高亮等处理,处理完成后返回文档。

14.1 简单搜索

查询文档:

GET books/_search
{
  "query": {
    "match_all": {}
  }
}

查询结果如下:

ElasticSearch 搜索入门
image-20201111204708546

hits 中就是查询结果,total 是符合查询条件的文档数。

简单搜索可以简写为:

GET books/_search

简单搜索默认查询 10 条记录。

14.2 词项查询

即 term 查询,就是根据去查询,查询指定字段中包含给定单词的文档,term 查询不被解析,只有搜索的词和文档中的词精确匹配,才会返回文档。应用场景如:人名、地名等等。

查询 name 字段中包含 十一五 的文档。

GET books/_search
{
  "query": {
    "term": {
      "name""十一五"
    }
  }
}

14.3 分页

默认返回前 10 条数据,es 中也可以像关系型数据库一样,给一个分页参数:

GET books/_search
{
  "query": {
    "term": {
      "name""十一五"
    }
  },
  "size": 10,
  "from": 10
}

14.4 过滤返回字段

如果返回的字段比较多,又不需要这么多字段,此时可以指定返回的字段:

GET books/_search
{
  "query": {
    "term": {
      "name""十一五"
    }
  },
  "size": 10,
  "from": 10,
  "_source": ["name","author"]
}

此时,返回的字段就只有 name 和 author 了。

ElasticSearch 搜索入门
image-20201111210101809

14.5 最小评分

有的文档得分特别低,说明这个文档和我们查询的关键字相关度很低。我们可以设置一个最低分,只有得分超过最低分的文档才会被返回。

GET books/_search
{
  "query": {
    "term": {
      "name""十一五"
    }
  },
  "min_score":1.75,
  "_source": ["name","author"]
}

得分低于 1.75 的文档将直接被舍弃。

14.6 高亮

查询关键字高亮:

GET books/_search
{
  "query": {
    "term": {
      "name""十一五"
    }
  },
  "min_score":1.75,
  "_source": ["name","author"],
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}






往期推荐
0
1

50+ 需求文档免费下载!

0
2

Spring Security 教程合集

0
3

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

ElasticSearch 搜索入门

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

版权声明:程序员胖胖胖虎阿 发表于 2023年9月1日 上午9:00。
转载请注明:ElasticSearch 搜索入门 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...