前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch-文档的 CRUD

Elasticsearch-文档的 CRUD

原创
作者头像
懒人的小脑
修改2019-08-15 16:56:05
8160
修改2019-08-15 16:56:05
举报

本文介绍文档的 CRUD 操作以及文档的元信息、文档的批量操作以及 REST API 一些常见的返回码。

文档的 CRUD

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

创建文档

代码语言:txt
复制
PUT users/\_create/1



{



  "firstName":"Jack",



  "lastName":"Johnson",



  "tags":["guitar","skateboard"]



}
  • 文档 ID 支持自动生成和指定文档 ID 两种方式。通过调用 post /users/\_doc 系统会自动生成 document id
  • 使用 HTTP PUT users/_create/1创建文档时,URI 中显式指定 \_create ,此时如果该 id 的文档已存在,则操作失败

Index 和 Create的区别

Index不同于 create的地方是,如果文档不存在,就索引新的文档,否则如果文档存在,那么现有文档会被删除,新的文档被索引,版本信息+1。

代码语言:txt
复制
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。

代码语言:txt
复制
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”中。

代码语言:txt
复制
POST users/_update/1

{

  "doc": {

    "albums":["Album1","Album2"]

  }

}

CRUD示例

CRUD 示例
CRUD 示例

Bulk API

Elasticsearch 提供 Bulk API 支持一次 REST API 调用中,对不同的索引进行操作。支持的操作有:

  • Index
  • Create
  • Update
  • Delete

可以在 URI 中指定 Index 也可以在请求的 Payload 中指定。操作中单条操作失败,并不影响其他操作。返回结果包括了每一条操作执行的结果。

代码语言:txt
复制
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"} }
bulk API
bulk API

批量读取 mget

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

代码语言:txt
复制
GET _mget

{

  "docs":[

    {

      "_index": "user",

      "_id":1

    },

    {

      "_index": "comment",

      "_id":1

    }

    ]

}

------

GET \_mget

{

  "docs":[

    {

      "_index": "test1",

      "_id":1

    },

    {

      "_index": "test",

      "_id":2

    }

    ]

}
mget
mget

批量查询 msearch

代码语言:txt
复制
POST kibana_sample_data_ecommerce/_msearch

{}

{"query": {"match\_all":{}},"size":1}

{"index": "kibana_sample_data_flights"}

{"query": {"match_all": {}},"size":2}

API 常见的错误返回

问题现象

原因

无法连接

网络故障或集群故障

连接无法关闭

网络故障或节点繁忙

429

集群过于繁忙

4XX

请求体格式错误

500

集群内部错误

总结

  1. 文档的 CRUD操作
  2. 每个文档都有一个版本号,可用于并发控制,避免冲突
  3. _mget和 bulk API 可以减少建立网络连接所产生的开销
  4. bulk API 每行需要指定 index 信息,也可以在 URI 中指定,从 ES 7开始,不需要指定 type
  5. 单词批量操作,数据量不宜过大,以避免引发性能问题

本文相关文件

CRUD 示例

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文档的 CRUD
    • 创建文档
      • 获取文档
        • 修改文档
          • CRUD示例
          • Bulk API
          • 批量读取 mget
          • 批量查询 msearch
          • API 常见的错误返回
          • 总结
          • 本文相关文件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档