本文介绍文档的 CRUD 操作以及文档的元信息、文档的批量操作以及 REST API 一些常见的返回码。
CRUD 指的是在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
操作预览
操作 | HTTP 请求 |
---|---|
Index | PUT my_index/_doc/1 { "user":"mike", "commnet":"You Know,for search" }【Type 名称在7.0之后约定都使用 _doc】 |
Create | PUT my_index/_create/2 { "user":"mike", "comment":"You Know,for search" } POST my_index/_doc { "user": "Simon", "comment":"You know,for search" } |
Read | GET my_index/_doc/2 |
Update | POST my_index/_update/1 { "doc": { "user":"mike", "comment":"You know,Elasticsearch" } } |
Delete | DELETE my_index/_doc/1 |
PUT users/\_create/1
{
"firstName":"Jack",
"lastName":"Johnson",
"tags":["guitar","skateboard"]
}
post /users/\_doc
系统会自动生成 document id\_create
,此时如果该 id 的文档已存在,则操作失败Index 和 Create的区别
Index不同于 create的地方是,如果文档不存在,就索引新的文档,否则如果文档存在,那么现有文档会被删除,新的文档被索引,版本信息+1。
PUT users/_doc/1
{
"tags":["guitar","skateboard","reading"]
}
GET users/_doc/1
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"tags" : [
"guitar",
"skateboard",
"reading"
]
}
}
获取文档使用 HTTP 的 GET 方法,指明索引名称/_doc(type)/文档 ID。
GET users/_doc/1
{
//-----文档元数据部分开始-----
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 1, //每发生一次修改,版本号+1
"_seq\_no" : 0,
"_primary_term" : 1,
//-----文档元数据部分结束-----
"found" : true,
//-----文档原始信息开始-----
"_source" : {
"firstName" : "Jack",
"lastName" : "Johnson",
"tags" : [
"guitar",
"skateboard"
]
}
//-----文档原始信息结束-----
}
关于版本信息,即使文档被删除,Version 号也会不断增加。 _source
中默认包含了文档的所有原始信息。找不到的文档返回 HTTP 404。
Update 方法不会删除原有的文档,POST 方法需要包含在“doc”中。
POST users/_update/1
{
"doc": {
"albums":["Album1","Album2"]
}
}
Elasticsearch 提供 Bulk API 支持一次 REST API 调用中,对不同的索引进行操作。支持的操作有:
可以在 URI 中指定 Index 也可以在请求的 Payload 中指定。操作中单条操作失败,并不影响其他操作。返回结果包括了每一条操作执行的结果。
POST _bulk
{ "index" : { "_index" : "test1","_id": "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test","_id" : "2"} }
{ "create" : { "_index" : "test2","_id" : "3" } }
{ "field1" : "value3" }
{ "update" : { "_id":"1","_index":"test"} }
{ "doc" : { "field2": "value2"} }
批量操作可以减少网络连接所产生的开销,,提高程序的性能。
GET _mget
{
"docs":[
{
"_index": "user",
"_id":1
},
{
"_index": "comment",
"_id":1
}
]
}
------
GET \_mget
{
"docs":[
{
"_index": "test1",
"_id":1
},
{
"_index": "test",
"_id":2
}
]
}
POST kibana_sample_data_ecommerce/_msearch
{}
{"query": {"match\_all":{}},"size":1}
{"index": "kibana_sample_data_flights"}
{"query": {"match_all": {}},"size":2}
问题现象 | 原因 |
无法连接 | 网络故障或集群故障 |
连接无法关闭 | 网络故障或节点繁忙 |
429 | 集群过于繁忙 |
4XX | 请求体格式错误 |
500 | 集群内部错误 |
CRUD 示例
GET _cat/indices
DELETE users
//create document,自动生成_id
POST users/_doc
{
"user":"Mike",
"post_date":"2019-08-14T14:12:12",
"message": "trying out Kibana"
}
//cerate document,指定 id。如果 ID 存在,报错
//第一次执行此命令成功,第二次失败
PUT users/_doc/1?op_type=create
{
"user":"Jack",
"post_date":"2019-08-14T14:14:12",
"message":"trying out Elasticsearch"
}
//通过文档 ID 获取文档信息
GET users/_doc/1
//index 创建文档,当前文档ID 为 1 已存在
//结果是原文档被删除,当前文档的版本号在之前的版本号上+1
PUT users/_doc/1
{
"user":"Mike"
}
//在原文档上增加字段
POST users/_update/1/
{
"doc":{
"post_date":"2019-08-14T15:57:12",
"message": "trying out Elasticsearch"
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。