1.初步检索
1.1_cat
GET /_cat/nodes: 查看所有节点
GET /_cat/health:查看es健康状况
GET /_cat/master:查看主节点信息
GET /_cat/indices:查看所有索引相当于mysql的showdatabase
1.2索引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/external/1
:在customer索引下的external类型下保存1号数据为
{
"name": "JSON Doe"
}
- 获取结果
带"_"都称为元数据
{
"_index": "customer",//数据在哪个索引下
"_type": "external",//在哪个类型下
"_id": "1",//数据的id
"_version": 2,//数据的版本,每更新一次版本都会升级
"result": "created"//新建 //第二次是为"updated",
"_shards": { //分片
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 2
}
其实这个请求还支持使用POST方式发送,路径和上面一样的时候结果一致,
POST可以不带ID发送(不带最后的 /1),ES会自动生成一个ID,如果再次请求也会再次新增一个ID
PUT方式如果不带ID将会出现405错误:请求方式不允许PUT 必须带id
1.3查询文档
GET customer/external/1
{
"_index": "customer", //在哪个索引
"_type": "external", //在哪个类型
"_id": "1", //记录id
"_version": 2, //版本号
"_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term": 2, //同上,主分片重新分配,如重启,就会变化
"found": true,
"_source": {
"name": "jack"
}
}
更新携带 ?if_seq_no=0&if_primary_term=1 乐观锁机制
1.4乐观锁演示
两个put语句后面都跟上?if_seq_noi=1&if_primary_term=1
并发控制号(seq_noi=1)
当第一个修改后seq_no变为2,那么另外一个就不能更新了
第二个更新就报错
相当于mysql的乐观锁操作
1.5更新文档
带_update
使用后缀_update明确表明这是一个文档更新命令
POST customer/external/1/_update
{
"doc":{
"name":"John Doew"
}
}
如果更新数据和上次的一模一样那么不会更新数据的版本号,序列号,result也会显示“noop”
不带_update
POST customer/external/1
{
"name":"john Doe2"
}
或者
PUT customer/external/1
PUT和POST(不带_update)都会直接更新数据,版本号序列号都会发生改变
1.6删除文档&索引
DELETE customer/external/1 //删除文档
DELETE customer //删除索引
es没有提供类型(type)的删除,如果要删除只能删除整个index,所以7+版本将type弃用了
1.7bulk批量API
POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name": "JSON Doe"}
{"index":{"_id":"2"}}
{"name": "Jone Doe"}
-
语法格式
两行为一个整体
{action:{metadata}}//指定操作类型和id
{requestbody} //内容 -
复杂实例
POST /_bulk
//删除
{"delete":{"_index":"website","_type":"blog","_id":"123"}}
//创建
{"create":{"_index":"website","_type":"blog","id":"123"}}
{"title": "My first blog post"}
//保存
{"index": {"_index":"website","_type":"blog"}}
{"title": "My second blog post"}
//更新
{"update":{"_index":"website","_type":"blog","_id":"123"}}
{"doc":{"title":"My updated blog post"}}
批量操作中的每一个操作相互独立,可以独立成功或失败,彼此没有影响。
- 导入测试数据
使用kibana导入,POSTMAN不支持批量命令,安装kibana之前的文章有介绍
es官方提供的测试数据(https://github.com/elastic/elasticsearch/blob/master/docs/src/test/resources/accounts.json)