文章目录
【笔记于学习尚硅谷课程所作】
3、初步检索
对 ES 的所有请求都被封装成了 REST API,因此我们可以使用 postman 来访问它
3.1 _cat
- /_cat/nodes:查看所有节点(GET)
- /_cat/health:查看es健康状况 (GET)
- /_cat/master:查看主节点 (GET)
- /_cat/indices:查看所有索引(GET)
3.2 put&post新增数据
在 postman 地址栏中输入 http://192.168.196.128:9200/索引名/类型名/id
,参数为json格式的
{ "name":"lfuser" }
,两种方式发送请求
- PUT: 如果没有则新增,如果有则修改(必须指定 id)
- POST:如果不指定id,则会自动生成 id并新增。指定 id 就会修改这个数据,之前没有也会新增,并新增版本号 (允许不带id)
如果加上_update即为修改操作
在 postman 中使用 post 方法发送 http://192.168.196.128:9200/customer/external/1/_update
请求,参数传:
{
"doc": {
"name": "xxx"
}
}
- 使用_update修改:会对比之前数据,如果与之前相同则不增加版本号
- 不用_update修改:会直接修改并且增加版本号
3.3 get查询数据
在 postman 地址栏中输入 http://192.168.196.128:9200/索引名/类型名/id
,发送方式为Get,结果如下
{
"_index": "customer", //所在索引
"_type": "external", //所在类型
"_id": "1", //记录id
"_version": 1, //版本号
"_seq_no": 0, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
"found": true, //表示找到了数据
"_source": { //内容
"name": "lfuser"
}
}
3.4 delete删除
在 postman 中使用 delete 方法发送 http://192.168.196.128:9200/索引名/类型名/id
请求
3.5增删改查总结
- 增:PUT和POST
- 删:DELETE
- 改:PUT和POST
- 查:GET
只需要用对应的请求方式,发送http://IP地址:9200/索引名/类型名/id
请求,加上所需要的数据(JSON)即可
3.6 _bulk 批量操作
进入之前的kibana进行操作
在DevTools下进行操作,进行一个批量操作,数据从gitee获得,如下图
结果如下
4、进阶检索
4.1 Search
ES 支持两种基本方式检索:
- 1.通过使用
REST request URI
发送搜索参数(uri+检索参数
) - 2.通过使用
REST requestbody
来发送它们(uri+请求体
)
GET bank/_search?q=*&sort=account_number:asc
2.这种方式的请求体为Query DSL( Elastisearch 提供的一个可以执行查询的 Json 风格的 DSl (domain-specific language 领域特定语言) )
GET /bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc" //排序规则
}
}
],
"from": 0, //from与size类似于分页操作,从几开始,拿多少个
"size": 5,
"_source": ["balance","firstname"] //选定显示字段,默认全部显示
}
4.2 match全文检索
全文检索按照评分进行排序,会对检索条件进行分词匹配 。依赖于ElasticSearch本身的倒排索引机制
GET /bank/_search
{
"query": {
"match": {
"address": "Mill Lane"
}
}
}
4.3 match_phrase短语匹配
将需要匹配的值当成一个整体单词(不分词)进行检索
GET /bank/_search
{
"query": {
"match_phrase": {
"address": "mill road"
}
}
}
4.4 multi_match多字段匹配
GET /bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["address","state"] //这两个里面出现mill都算,相当于多个模糊查询用or连接
}
}
}
4.5 bool复合查询
相当于and将所有条件连接
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": "M"
}
},
{
"match": {
"address": "Mill"
}
}
],
"must_not": [
{"match": {
"age": 28
}}
],
"should": [
{"match": {
"lastname": "Holland"
}}
]
}
}
}
可选参数如下
参数 | 描述 |
---|---|
must | 必须符合,并增加相关性得分 |
must_not | 必须不符合,不增加相关性得分 |
should | 加分项,如果有则增加相关性得分 |
filter | 和must功能相同,但不贡献相关性得分 |
4.6 term
和 match 一样,匹配某个属性的值。全文检索字段用 match,非 text 字段匹配用 term。
GET /bank/_search
{
"query": {
"term": {
"age":28
}
}
}
4.7aggregations (聚合)
聚合提供了从数据中分组和提取数据的能力。 类似于mysql的分组和聚合函数
GET /bank/_search
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {//年龄范围分布聚合
"field": "age",
"size": 100//返回100中情况
},
"aggs": { //基于ageAgg的结果做聚合
"ageAvg": {
"avg": { //求balance的平均值
"field": "balance"
}
}
}
}
}
}
4.8 mapping映射
Mapping是用来定义一个文档 (document), 以及它所包含的属性(field)是如何存储和索引的。
//查看映射
GET bank/_mapping
(1)创建映射
//创建索引,并创建映射规则
PUT /my_index
{
"mappings": {
"properties": {
"age":{"type": "integer"},
"name":{"type": "text"}
}
}
}
//结果如下
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "my_index"
}
(2)新增映射
//索引已经建立的情况下,新增映射
PUT /my_index/_mapping
{
"properties": {
"employee-id":{
"type": "keyword",
"index":false
}
}
}
//结果如下
{
"acknowledged" : true
}
(3)数据迁移
不能修改mapping,只能重新创建索引做数据迁移
//1.创建新索引和映射规则
PUT /newbank
{
"mappings": {
"properties": {
"account_number": {
"type": "long"
},
"address": {
"type": "text"
},
"age": {
"type": "integer"
},
"balance": {
"type": "long"
},
"city": {
"type": "keyword"
},
"email": {
"type": "keyword"
},
"employer": {
"type": "keyword"
},
"firstname": {
"type": "text"
},
"gender": {
"type": "keyword"
},
"lastname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"state": {
"type": "text"
}
}
}
}
//2.数据迁移,新版本没有类型的用下面的方式,如果是旧版本有类型的迁移要指定旧版本的迁移
POST _reindex
{
"source": {
"index": "bank"
},
"dest": {
"index": "newbank"
}
}