文档的CRUD
上一篇日志提到文档可以类比为关系型数据库当中的一条记录,那么与之对应的,也会存在一系列的CRUD操作,本次日志主要对elasticsearch当中的CRUD进行学习
- Create(创建)
创建也就是插入一条数据,有两种方式,一种是通过PUT请求,一种是通过POST请求。
#通过put的方式
PUT _index/_create/1
{"user":"mike","comment":"You know, fro search"}
#通过post的方式
POST _index/_doc
{"user":"mike","comment":"You know, fro search"}
两种方式的主要区别为是否为文档指定id,如果不指定id则必须使用POST的方式,此时es会自动为文档生成一个文档id,如果指定来id,则可以通过PUT的方式来创建一条文档。
另外,在执行PUT请求时,_create 可以替换成_doc,前者在文档id已存在的时候会返回报错,而后者则会覆盖掉原有的文档。
- Update(更新)
POST _index/_update/1
{"doc":{"user":"mike","comment":"You know, Elasticsearch"}
通过_update的方式实现的是数据的更新,并不会覆盖掉原有的文档,而是在文档原有的数据基础上进行修改。
文档的获取和删除可参考上面的图片中的语法,当然,在实际的查询中我们并不会直接通过文档id的来获取数据,不过在进行数据维护的时候可能还是会使用到的,本节不做过多的赘述。
批量操作
elasticsearch提过了bulk api来实现文档的批量操作,在一次bulk api的调用中:
- 可对多个index进行操作
- 可支持index,update,create,delete四种操作
- 可以在url中指定index,也可以在payload中进行
- 操作中单条失败不影响其他的数据
- 返回信息包含每一条操作的结果
POST _bulk
{"index":{"_index":"test","_id":"1"}}
{"field1":"value1"}
{"delete":{"_index":"test","_id":"2"}}
{"create":{"_index":"test2","_id":"3"}}
{"field1":"value3"}
{"update":{"_index":"test":"_id":"1"}}
{"doc":{"field2":"value2"}}
另外还有批量读取api:_mget
GET _mget
{
"docs":[
{
"_index":"user",
"_id":"1"
},
{
"_index":"comment",
"_id":"1"
}
]
}
以及批量查询api: _msearch
POST test/_msearch
{}
{"query":{"match_all":{}},"size":"1"}
{"index":{"test2"}}
{"query":{"match_all":{}},"form":"0","size":"2"}