【Elasticsearch 探索之路】(二)文档的 CRUD 和批量操作

上一篇,我们介绍了什么是 Elasticsearch,它能做什么用以及基本概念(索引 Index、文档 Document、类型 Type)理解。这篇主要对文档的基本 CRUD 以及如何批量操作讲解。下面让我们进入正题。

一、文档的 CRUE

Create 文档

支持自动生成文档 Id 和指定文档 Id 两种方法

#create document. 自动生成 Id
POST songs/_doc
{
"name":"说好不哭",
"author":"周杰伦",
"price":3
}

#create document. 指定Id。如果 Id 已经存在,报错
PUT songs/_create/1
{
"name":"说好不哭",
"author":"周杰伦",
"price":3
}

Get 文档

#找到文档
Get songs/_doc/1

result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "说好不哭",
"author" : "周杰伦",
"price" : 3
}
}
  • 找到文档,返回 HTTP 200

    • _index/_type/,_type 在版本7中只有 _doc 类型

    • _version 版本信息,同一个 Id 的文档被删除了,版本号也会增加

    • _source 中默认包含文档的原始信息

    • 文档元信息

  • 找不到,返回 HTTP 404

Index 文档

Index 也是用于创建文档的方法,和 Create 不同有一些不同,如果文档不存在情况,直接创建新文档,否则删除原来的文档,新文档被索引,_version 版本加一。

PUT songs/_doc/1
{
"name":"说好不哭",
"author":"周杰伦",
"price":0
}

result:
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,//+1
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}

Update 文档

  • Update 不会删除原来文档,而是实现真正更新

  • Post 方法和 Payload 需要包含在 "doc" 中

#在原文档上增加字段
POST songs/_update/1
{
"doc":{
"update" : "2019-05-15T14:12:12"
}
}

GET songs/_doc/1
{
"_index" : "songs",
"_type" : "_doc",
"_id" : "1",
"_version" : 3,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "说好不哭",
"author" : "周杰伦",
"price" : 0,
"update" : "2019-05-15T14:12:12"
}
}

Delete 文档

#Delete by Id
#删除文档
DELETE users/_doc/1

Bulk 批量操作

  • Bulk 支持在一次调用中,对不同索引进行操作

  • 支持 Index、Create、Update、Delete 类型操作

  • 单条错误不影响其他操作进行

  • 每一条操作都会有对应的执行的结果显示

POST _bulk
{ "index" : { "_index" : "test1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test1", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field3" : "value3" }
{ "update" : { "_index" : "test1","_id" : "1"} }
{ "doc" : {"field2" : "value2"} }

mget 批量读取

顾名思义就是可以对不同索引的文档进行批量读取,只需要提供索引名称和 Id 就可以在一次 API 中全部读取,减少网络开销。

GET /test1/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}

msearch 批量查询

同样 ES 也提供了 msearch 对不同索引进行批量查询。

# msearch 操作
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}

注:kibana_sample_data_ecommerce

可以在 kibana 的样例数据,需要手动点击添加。

本篇主要对文档的 CRUD 以及批量操作 API 进行讲解。在这里提一点,批量操作可以帮助我们提高对 API 调用性能,但如果一次提交过多数据,也是有可能会导致 ES 过大的压力,反而造成性能下降。

推荐阅读:

【Elasticsearch 搜索之路】(一)什么是 Elasticsearch?

大白话讲梯度下降法(二)
大白话讲梯度下降法(一)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值