CRUD方法
Create
- 支持自动生成文档id和指定文档id两种方法
- 通过调用“post /indexName/_doc”,系统会自动生成document id
- 使用HTTP PUT indexName/_create/id创建时,URI中显示指定_create,此时如果该id的文档已经存在,操作失败
如果id已经存在,会失败
- es通过版本号判断冲突
Index
- PUT indexName/_doc/id
- 如果id不存在,会创建新的文档。否则,会先删除现有的文档,再创建新的文档,版本会增加
Update
- 不会删除原来的文档,而是实现真正的数据更新
- post方法 / payload需要包含在“doc”中,POST indexName/_update/id
文档必须已经存在,更新只会对相应字段做增量修改
Read
- GET indexName/_doc/id
- 找到文档,返回HTTP 200
- 文档元信息
- _index / _type /
- _version,改动次数,版本信息,同一个id的文档,即使被删除,version号也会不断增加
- _source中默认包含了文档的所有原始信息
- 文档元信息
- 找不到文档,返回HTTP 404
Delete
Bulk API
- 支持在一次API调用中,对不同的索引进行操作
- 支持四中类型操作
- index、create、update、delete
- 可以在URI中指定index,也可以在请求的payload中进行
- 操作中单条操作失败,并不会影响其他操作
- 返回结果包含了每一条操作执行的结果
### Bulk 操作
# 执行两次,查看每次的结果
#执行第1次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
#执行第2次
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
批量读取 - mget
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1"
},
{
"_index" : "test",
"_id" : "2"
}
]
}
批量查询 - msearch
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
常见错误返回
无法连接:网络故障或集群挂了
连接无法关闭:网络故障或节点出错
429:集群过于繁忙
4xx:请求体格式有错
5xx:集群内部错误
批量操作能够提高api调用的性能,但是不要一次发送过多的数据:
比较笼统的说,一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M。会报错