和我一起打造个简单搜索之ElasticSearch入门
本文最后更新于:2021年6月15日 晚上
本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分。
环境
本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。
系列文章
- 一、和我一起打造个简单搜索之ElasticSearch集群搭建
- 二、和我一起打造个简单搜索之ElasticSearch入门
- 三、和我一起打造个简单搜索之IK分词以及拼音分词
- 四、和我一起打造个简单搜索之Logstash实时同步建立索引
- 五、和我一起打造个简单搜索之SpringDataElasticSearch入门
- 六、和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮
- …
基础概念
索引–相当于数据库
类型–相当于表
文档–相当于一条记录
分片–对索引进行分片,分布于集群各个节点上,降低单个节点的压力
备份–拷贝分片就完成了备份
基本语法
索引
索引类型
- 结构化索引
- 特点:通过接口创建,可以指定 mappings
- url:port/索引名/类型名/_mappings
- 非结构化索引
- 特点:通过 elasticsearch head 创建 mapping 为空
使用 RestClient/PostMan 创建结构化索引
创建一个 people 的索引,包含一个类型 man
1 |
|
keyword 与 text 的区别
type 类型为 keyword 的时候,ES 不会对其进行分词,而 text 会被分词
es 通过 rest 接口对数据操作
插入数据
- 指定文档 id 插入
- PUT 请求: ip:port/索引/类型/id
- PUT 请求: ip:port/索引/类型/id
- 自动产生文档 id 插入
- POST 请求: ip:port/索引/类型
- POST 请求: ip:port/索引/类型
修改数据
- 直接修改
- POST 请求: ip:port/索引/类型/id/_update
- POST 请求: ip:port/索引/类型/id/_update
删除数据/删除索引
- 删除文档
- DELETE 请求 ip:端口/索引/类型/id
- 删除索引
- DELETE 请求 ip:端口/索引
查询数据
简单查询
- GET 请求: ip:端口/索引/类型/id
条件查询
- POST请求: ip:端口/索引/_search
- 指定条件查询,分页与排序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16{
"query":{
"match":{
"name":"WeJan"
}
},
"sort":[
{
"age":{
"order":"asc"
}
}
],
"from" : 0,
"size" : 10
}
聚合查询
- POST请求: ip:端口/索引/_search
- 分组,可以多个分组
1
2
3
4
5
6
7
8
9{
"aggs":{
"group_by_age":{
"terms":{
"field":"age"
}
}
}
} - 聚合计算
1
2
3
4
5
6
7
8
9{
"aggs":{
"age_count":{
"stats":{
"field":"age"
}
}
}
}- sum
- avg
- max
- min
- count
高级查询
- 习语匹配(全词匹配)
1
2
3
4
5
6
7{
"query":{
"match_phrase":{
"name":"WeJan"
}
}
} - 多字段匹配,多个字段包含query
1
2
3
4
5
6
7
8{
"query":{
"multi_match":{
"query":"WeJan",
"fields":["author", "title"]
}
}
} - query_string 文本查询
1
2
3
4
5
6
7{
"query":{
"query_string":{
"name":"(WeJan AND Jan) OR 哈哈"
}
}
} - 针对多个字段的文本查询
1
2
3
4
5
6
7
8{
"query":{
"query_string":{
"name":"WeJan OR 哈哈",
"fields":["author", "title"]
}
}
} - 字段查询,比如年龄,分类
1
2
3
4
5
6
7{
"query":{
"term":{
"age":25
}
}
} - 范围查询,可以对时间字段进行查询,现在使用 “now”替代
1
2
3
4
5
6
7
8
9
10{
"query":{
"range":{
"age":{
"gte":26,
"lte":36
}
}
}
}参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!