ElasticSearch(十一)批量CURD bulk
1、bulk语法
POST /_bulk
{ "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }}
{ "create": { "_index": "test_index", "_type": "test_type", "_id": "12" }}
{ "test_field": "test12" }
{ "index": { "_index": "test_index", "_type": "test_type", "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_index": "test_index", "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }
每一个操作要两个json串,语法如下: {"action": {"metadata"}}
{"data"}
举例,比如你现在要创建一个文档,放bulk里面,看起来会是这样子的: {"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}
有哪些类型的操作可以执行呢?
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
如果格式是这样:
POST /_bulk
{"index":
{"_index": "test_index", "_type": "test_type","_id": "1"} }
{"test_field1": "test1", "test_field2": "test2"}
结果:
{
"error": {
"root_cause": [
{
"type": "json_e_o_f_exception",
"reason": "Unexpected end-of-input within/between Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@7da6bde0; line: 1, column: 21]"
}
],
"type": "json_e_o_f_exception",
"reason": "Unexpected end-of-input within/between Object entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@7da6bde0; line: 1, column: 21]"
},
"status": 500
}
如果格式是这样:
POST /_bulk
{"index": {"_index": "test_index", "_type": "test_type","_id": "1"}}
{"test_field1": "test1", "test_field2": "test2"}
结果:
{
"took" : 19,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "1",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 5,
"status" : 200
}
}
]
}
bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
POST /test_index/_bulk
{ "delete": { "_type": "test_type", "_id": "3" }}
{ "create": { "_type": "test_type", "_id": "12" }}
{ "test_field": "test12" }
{ "index": { "_type": "test_type" }}
{ "test_field": "auto-generate id test" }
{ "index": { "_type": "test_type", "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }
#! Deprecation: Deprecated field [_retry_on_conflict] used, expected [retry_on_conflict] instead
{
"took" : 64,
"errors" : true,
"items" : [
{
"delete" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "3",
"_version" : 1,
"result" : "not_found",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 5,
"status" : 404
}
},
{
"create" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "12",
"status" : 409,
"error" : {
"type" : "version_conflict_engine_exception",
"reason" : "[test_type][12]: version conflict, document already exists (current version [2])",
"index_uuid" : "P8_8FJpGSgW8HglInNvZYQ",
"shard" : "1",
"index" : "test_index"
}
}
},
{
"index" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "Baq9WWgBjIP9BXE3vrJ2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 5,
"status" : 201
}
},
{
"index" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 5,
"status" : 201
}
},
{
"update" : {
"_index" : "test_index",
"_type" : "test_type",
"_id" : "1",
"_version" : 4,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 5,
"status" : 200
}
}
]
}
同一个index和type的情况下:
POST /test_index/test_type/_bulk
{ "delete": { "_id": "3" }}
{ "create": { "_id": "12" }}
{ "test_field": "test12" }
{ "index": { }}
{ "test_field": "auto-generate id test" }
{ "index": { "_id": "2" }}
{ "test_field": "replaced test2" }
{ "update": { "_id": "1", "_retry_on_conflict" : 3} }
{ "doc" : {"test_field2" : "bulk test1"} }
2、bulk size最佳大小
bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。
ElasticSearch(十一)批量CURD bulk的更多相关文章
- java操作elasticsearch实现批量添加数据(bulk)
java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...
- Elasticsearch入门教程(四):Elasticsearch文档CURD
原文:Elasticsearch入门教程(四):Elasticsearch文档CURD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- ElasticSearch _bulk批量处理报错The bulk request must be terminated by a newline
在JSON数据最后回车换行,代码中可以
- ElasticSearch 定时批量删除N天前的数据
描述: 之前我已经完成了使用ElasticSearch.kibana.filebeat.三个工具完成分布式集群收集 分布在各个ip地址上的微服务日志,这样就可以统一的在一个服务器上查看了所有的微服务产 ...
- ElasticSearch(十三) bulk api奇特的json格式的原因
bulk api的语法 正常的语法: {"action": {"meta"}}\n {"data"}\n {"action&quo ...
- 7 批量查询mget、批量修改bulk
注意:当执行多条数据查询.增删改时,一定要用mget.bulk,提升性能,减少网络传输 mget 回顾:查询单个文档 GET /beauties/my/2 mget 查询多个文档: 不同 ...
- ElasticSearch系列四 CURD
1: ES 类似JPA操作 1.1 编写实体类 1.2 编写映射文件 xxx.json 1.3编写repository继承 ElasticSearchrepository 1.4 编写admin 的C ...
- Android入门(十一)SQLite CURD
原文链接:http://www.orlion.ga/594/ 一.添加数据 SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法 ...
- ElasticSearch(十一)Elasticsearch清空指定Index/Type数据
POST /index_name/type_name/_delete_by_query?conflicts=proceed { "query": { "match_all ...
随机推荐
- Visual Studio Code 使用教程
visual studio code以下简称vsc.vsc这个编辑器也火了一会了,最近在跟风学一波typescript,网络上很多人说vsc是最适合ts的编辑器,而且这个编辑器本身也很好用,所以学一下 ...
- nVidia的物理系统
PhysX PhysX(wiki en 中文,physx wiki physx wiki2)是nVidia公司一款跨平台实时物理引擎,可使用硬件(GPU.PPU: Physics Process ...
- H264码率设置
转帖 http://blog.csdn.net/jefry_xdz/article/details/8299901 一.什么是视频码率? 视频码率是视频数据(视频色彩量.亮度量.像素量)每秒输出的位数 ...
- Visual Studio各版本下载链接
Visual Studio 2015 企业版 链接: https://pan.baidu.com/s/1NFGyIbm2RNsuwwEU-bYicQ 提取码: m961 Visual Studio 2 ...
- 346. Moving Average from Data Stream
/* * 346. Moving Average from Data Stream * 2016-7-11 by Mingyang * 这里注意的就是(double) sum / count * su ...
- Spring异步任务处理,@Async的配置和使用
本文转自http://blog.csdn.net/clementad/article/details/47403185 感谢作者 这个注解用于标注某个方法或某个类里面的所有方法都是需要异步处理的.被注 ...
- fastdfs-zyc监控系统的使用
原文:http://blog.csdn.net/foreversunshine/article/details/51907659 写在前面 前面有介绍过怎么安装与使用FastDFS来进行分布式的文件存 ...
- Balanced Binary Tree——数是否是平衡,即任意节点左右字数高度差不超过1
Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...
- SMI#、SCI#信号在OS、BIOS、EC中的中断方式(Linux)
EC资料有个很好的CSDN博客推荐去看看:zhao_longwei的专栏 EC固件代码架构:https://blog.csdn.net/zhao_longwei/article/details/510 ...
- git clean
使用git clean清除未加入版控的数据 作者:Level Up 发布日期:2012-12-21 10:48:10 笔者在使用版本控制软件时,不知为何常常会有些暂存的数据产生.像是下面 ...