松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
经过近一个月的铺垫,ElastiSearch 系列终于进入搜索环节啦!
搜索是 ElasticSearch 最为丰富有趣的功能,这一块松哥将从全文查询、词项查询、复合查询、嵌套查询、位置查询、特殊查询等多个方面来和大家逐一剖析 ElasticSearch 中搜索的玩法!今天我们就先来看一个简单的搜索入门。
本文是ElasticSearch 系列第 18 篇,和大家聊一聊索引的基本操作,前 17 篇传送门:
-
打算出一个 ElasticSearch 教程,谁赞成,谁反对?
-
ElasticSearch 从安装开始
-
ElasticSearch 第三弹,核心概念介绍
-
ElasticSearch 中的中文分词器该怎么玩?
-
ElasticSearch 索引基本操作
-
ElasticSearch 文档的添加、获取以及更新
-
ElasticSearch 文档的删除和批量操作
-
ElasticSearch 文档路由,你的数据到底存在哪一个分片上?
-
ElasticSearch 并发的处理方式:锁和版本控制
-
ElasticSearch 中的倒排索引到底是什么?
-
ElasticSearch 动态映射与静态映射
-
ElasticSearch 四种字段类型详解
-
ElasticSearch 中的地理类型和特殊类型
-
ElasticSearch 23 种映射参数详解
-
ElasticSearch 如何配置某个字段的权重?
-
ElasticSearch 23 种映射参数详解【3】
-
ElasticSearch 映射模版
搜索数据导入:
搜索入门:
如果大家觉得视频风格还能接受,也可以看看松哥的付费视频:Spring Boot+Vue+微人事视频教程
以下是视频笔记:
注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。
13.ElasticSearch 搜索数据导入
-
在微信公众号后台回复 bookdata.json 下载脚本。
-
创建索引:
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 搜索入门
搜索分为两个过程:
-
当向索引中保存文档时,默认情况下,es 会保存两份内容,一份是
_source
中的数据,另一份则是通过分词、排序等一系列过程生成的倒排索引文件,倒排索引中保存了词项和文档之间的对应关系。
-
搜索时,当 es 接收到用户的搜索请求之后,就会去倒排索引中查询,通过的倒排索引中维护的倒排记录表找到关键词对应的文档集合,然后对文档进行评分、排序、高亮等处理,处理完成后返回文档。
14.1 简单搜索
查询文档:
GET books/_search
{
"query": {
"match_all": {}
}
}
查询结果如下:
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 了。
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": {}
}
}
}
1
50+ 需求文档免费下载!
2
Spring Security 教程合集
3
接了两个私活,都是血汗钱
本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。