Elasticsearch入门 2—文档的基本CRUD与批量操作

2 文档的基本CRUD与批量操作

2.1 文档的CRUD

Type名,约定都用_doc
Create — 如果ID已经存在,会失败
Index — 如果ID不存在,创建新的文档。否则,先删除现有的文档,再创建新的文档,版本会增加
Update — 文档必须已经存在,更新只会对相应字段做增量修改

2.1.1 Create

PUT users/_create/1

支持自动生成文档ID和指定文档ID两种方式
通过调用“post /users/_doc”
使用HTTP PUT user/_create/1创建时,URI中显示指定_create,此时如果该id的文档已经存在,操作失败

2.1.2 Get

GET users/_doc/1

找到文档,返回HTTP 200
找不到文档,返回HTTP 404

2.1.3 Index

PUT users/_doc/1

和Create不同的地方:如果文档不存在,就索引新的文档。否则,现有文档会被删除,新的文档被索引。版本信息+1

2.1.4 Update

Update不会删除原来的文档,而是实现真正的数据更新
Post方法 / Payload需要包含在“doc”中

POST users/_update/1
{
  "doc": {
    "albums":["Album1","Album2"]  
  }
}

2.2 Bulk API

在Rest请求时,重新建立网络开销是非常损耗性能的。而Bulk API的核心思想是在一次Rest请求中就执行多次不同的操作

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" } }

支持在一次API调用中,对索引进行不同操作
支持四种类型操作:Index,Create,Update,Delete
可以在URI中指定Index,也可以在请求的Payload中进行
操作中单条操作失败,并不会影响其他操作
返回结果包括了每一条操作执行的结果

2.3 批量读取 — mget

批量操作,可以减少网络连接所产生的开销,提高性能

GET _mget
{
  "docs":[
    {
      "_index": "user",
      "_id": 1
    },
    {
      "_index": "comment",
      "_id": 1
    }
  ]
}

2.4 批量查询 — msearch

POST users/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{}
{"query" : {"match_all" : {}}}
{"index" : "twitter2"}
{"query" : {"match_all" : {}}}

2.5 常见错误返回

无法连接:网络故障或集群挂了
连接无法关闭:网络故障或节点出错
429:集群过于繁忙
4xx:请求体格式有错
500:集群内部错误

批量操作可以提高性能,但是需要注意,在每次API请求时不要一次发送过多数据,否则可能会对ES集群产生过大压力,反而造成性能下降

你可能感兴趣的:(Elasticsearch入门 2—文档的基本CRUD与批量操作)