目录
1、es命令访问方式和风格
1.1 es访问方式
实际开发中,主要有三种方式可以作为es服务的客户端:
- 使用elasticsearch-head插件
- 使用elasticsearch提供的Restful接口直接访问
- 使用elasticsearch提供的API进行访问
1.2 Rest风格说明
一种软件架构风格,而不是标准。更易于实现缓存等机制
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 通过文档id查询文档 |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有的数据 |
2、新增操作
保存一个数据,保存在哪个索引的哪个类型下(哪张数据库哪张表下),保存时用唯一标识指定
2.1 POST指定ID新增
POST /demo/person/1
{
"name":"王璐",
"age":"35",
"sex":"男"
}
结论:指定ID新增,如果ID一样,数据不存在,是新增;数据存在,是更新;而且_seq_no和_version 每次调用值都会发送改变
2.2 POST不指定ID新增
POST /demo/person/
{
"name":"王璐",
"age":"35",
"sex":"男"
}
结论:不指定ID,每次点击都会自动生成ID值,而且都是新增
2.3 PUT新增
PUT /demo/person/3
{
"name":"张顺利",
"age":"43",
"sex":"女"
}
结论:PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错
总结:
- POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;
可以不指定id,不指定id时永远为创建
指定不存在的id为创建
指定存在的id为更新,而版本号会根据内容变没变而觉得版本号递增与
- PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。
必须指定id
版本号总会增加
- 怎么记:put和java里map.put一样必须指定key-value。而post相当于mysql insert
返回数据:
带有下划线开头的,称为元数据,反映了当前的基本信息。
{
"_index" : "demo", 表明该数据在哪个数据库下;
"_type" : "person",表明该数据在哪个类型下;
"_id" : "3", 表明被保存数据的id;
"_version" : 1, 被保存数据的版本
"result" : "create",数据的状态创建还是更新
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1, 而序列号"_seq_no"则可以看做是索引的信息 在第一次为索引插入数据时为0,每对索引内数据操作成功一次sqlNO加1, 并且文档会记录是第几次操作使它成为现在的情况的
"_primary_term" : 1
}
3.更新
3.1 POST带_update
#其他值不传,不会修改其他值
POST /demo/person/1/_update
{
"doc":{
"name" : "王璐",
"age" : "49"
}
}
3.2 POST不带_update
#方式一
POST /demo/person/1
{
"name" : "王璐",
"age" : "40"
}
#方式二
POST /demo/person/1
{
"doc":{
"name" : "王璐",
"age" : "35"
}
}
3.3 PUT
PUT demo/person/1
{
"doc":{
"name":"王璐",
"age":"49"
}
}
4.删除
#删除文档
DELETE /demo/person/1
#删除索引
DELETE /demo
注:elasticsearch并没有提供删除类型的操作,只提供了删除索引和文档的操作。
5.ES的批量操作——bulk
语法格式:
action:index/create/update/delete
metadata:_index,_type,_id
request body:_source (删除操作不需要加request body)
{ action: { metadata }}
{ request body }
5.1 批量新增
5.1.1 index批量新增
POST _bulk
{"index":{"_index":"mysql","_type":"student","_id":"1"}}
{"name":"李四","age":23}
{"index":{"_index":"mysql","_type":"student","_id":"2"}}
{"name":"李五","age":33}
5.1.2 create批量新增
POST _bulk
{"create":{"_index":"mysql","_type":"student","_id":"3"}}
{"name":"王一","age":34}
{"create":{"_index":"mysql","_type":"student","_id":"4"}}
{"name":"鲁尔","age":32}
5.1.2 create和index批量新增区别
POST _bulk
{"index":{"_index":"mysql","_type":"student","_id":"1"}}
{"name":"李四","age":23}
{"create":{"_index":"mysql","_type":"student","_id":"1"}}
{"name":"王一","age":34}
结论
create 创建操作,如果需要创建的文档已经存在,那么创建失败
index 创建或替换操作,如果要创建的文档不存在则执行创建操作,如果已经存在则执行替换操作
5.2 批量更新
POST _bulk
{"update":{"_index":"mysql","_type":"student","_id":"1"}}
{"doc":{"name":"王二","age":34}}
{"update":{"_index":"mysql","_type":"student","_id":"10"}}
{"doc":{"name":"李四","age":22}}
通过 _bulk 批量更新索引中的文档数据,其中一条更新成功,一条因为无法获取对应ID的文档,更新失败
5.3 批量删除
POST _bulk
{"delete":{"_index":"mysql","_type":"student","_id":1}}