文章目录

  • 前言
  • 一、bulk概述
    • 1.1 基础概念
    • 1.2 bulk语法
    • 1.3 操作类型
  • 二、使用示例
    • 2.1 批量插入
    • 2.2 批量更新
    • 2.3 批量删除
  • 总结

前言

本篇文章主要总结如何使用bulk对es进行批量操作,若有不足请教大神门在评论区多多补充。

一、bulk概述

1.1 基础概念

bulk是es提供的一种批量增删改的操作API。

1.2 bulk语法

bulk对JSON串的有着严格的要求。每个JSON串不能换行,只能放在同一行,同时,相邻的JSON串之间必须要有换行(Linux下是\n;Window下是\r\n)。bulk的每个操作必须要一对JSON串(delete语法除外)

例如若增加一个文档如下所示:

POST _bulk
{"create": {"_index": "example", "_type": "docs", "_id": 11}}
{"name": "test_bulk", "counter":"100"}

1.3 操作类型

  • create 如果文档不存在就创建,但如果文档存在就返回错误
  • index 如果文档不存在就创建,如果文档存在就更新
  • update 更新一个文档,如果文档不存在就返回错误
  • delete 删除一个文档,如果要删除的文档id不存在,就返回错误

从以上可以看出index是比较常用的,因为bulk操作失败不会影响其他文档操作,我们可以从他的返回结果中查看失败的详细原因。

二、使用示例

为了大家更快掌握使用方法,我们直接上代码

2.1 批量插入

代码如下(示例):

public void importData(){List<Map<String, Object>> list = new ArrayList<>();for (int i = 0; i < 10; i++) {Map<String, Object> map = new HashMap<>();map.put("name", "金手杖按摩会所");map.put("id", i);list.add(map);}handleData
}private void handleData(List<Map<String, Object>> list) {BulkRequest request = new BulkRequest();for (int i = 0; i < list.size(); i++) {Map<String, Object> map = list.get(i);request.add(new IndexRequest("indexName").id(String.valueOf(map.get("id"))).source(map, XContentType.JSON));}try {client.bulk(request, RequestOptions.DEFAULT);} catch (IOException e) {e.printStackTrace();}
}

2.2 批量更新

这里我们根据id批量更新其中的name

public void updateNameByIds(List<String> ids) {//这里我们把所有要更新的name统一更新为:大众洗浴BulkRequest request = new BulkRequest();// 更新热度值for (String id : ids) {//使用map集合存储我们要修改的字段和要修改的数据Map<String, Object> map = new HashMap<>();map.put("name", "大众洗浴");//第一个参数是索引,第二个参数是id,然后使用doc来放我们要修改的数据和集合request.add(new UpdateRequest("indexName", id).doc(map));}//批量更新操作try {restHighLevelClient.bulk(request, RequestOptions.DEFAULT);} catch (IOException e) {LOGGER.error("更新失败:" + e.getMessage());}
}

2.3 批量删除

代码如下(示例):

public void deleteByIds(List<String> ids) {BulkRequest request = new BulkRequest();// 更新热度值for (String id : ids) {//第一个参数是索引,第二个参数是id,然后使用doc来放我们要修改的数据和集合request.add(new DeleteRequest("indexName", id));}//批量删除操作try {restHighLevelClient.bulk(request, RequestOptions.DEFAULT);} catch (IOException e) {LOGGER.error("删除失败:" + e.getMessage());}
}

如果想根据指定条件进行删除我们也可以使用以下操作,但其删除比较慢:

public void deleteByKindId(String indexName,List<String> name)throws Exception{DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(indexName);deleteByQueryRequest.setQuery(QueryBuilders.termsQuery("name", name));remoteHighLevelClient.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了bulk的使用,在数据量比较大的时候我们通常再结合游标的方式分批进行插入。

elasticsearch批量操作之bulk相关推荐

  1. 用python批量更新es数据根据id_Python Elasticsearch批量操作客户端

    基于Python实现的Elasticsearch批量操作客户端 by:授客 QQ:1033553122 1.代码用途 Elasticsearch客户端,目的在于实现批量操作,如下: <1> ...

  2. 初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

    1. bulk: 1.1. bulk语法: 1.2. bulk行为-增删改: 2. bulk-index批量插入: 3. bulk-update批量修改: 4. bulk-delete批量删除: 5. ...

  3. elasticsearch批量操作

    1.批量查询的好处 就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的 如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩 ...

  4. Elasticsearch技术解析与实战(七)Elasticsearch批量操作

    批量查询 1.如果查询的document是不同index下的不同type种的话 GET /_mget {"docs" : [{"_index" : " ...

  5. 跟乐乐学ES!(三)ElasticSearch 批量操作与高级查询

    上一篇文章:跟乐乐学ES!(二)ElasticSearch基础. 下一篇文章:跟乐乐学ES!(四) java中ElasticSearch客户端的使用. 批量操作 有些增删改查操作是可以进行批量操作的, ...

  6. ElasticSearch提供的bulk update性能对比

    目的:为了对比update的数据中重复数据对性能的影响.

  7. ElasticSearch高级 (Query DSL查询 bulk批量操作 导入数据 各种查询 实战技巧-优化比重 全量与增量数据同步)

    ElasticSearch高级 01-Query DSL(Domain Specific Language) 1 查询上下文 2 相关度评分:_score 3 元数据:_source 4 Query ...

  8. bulk es 删除_ES 批量操作 bulk

    文章目录 基本语法 批量操作的类型 实操 create update delete 复合操作 参考资源 基本语法 bulk操作和以往的普通请求格式有区别.不要格式化json,不然就不在同一行了,这个需 ...

  9. 3.Elasticsearch学习之深度分页、游标查询、以及批量操作

    1.深度分页 1.分页查询 POST /shop/_doc/_search { "query": { "match_all": {} },"from& ...

最新文章

  1. python下载不了-python3下载不了
  2. 关于数据集 使用PutCollect后m_Recordset-Update();数据集更新报错的问题
  3. 2011年中国网络游戏市场实际销售收入达到428.5亿元
  4. java 下载文件选择下载路径_Java后台如何根据路径地址下载文件?
  5. 魔术师发牌问题 java_魔术师发牌问题--java实现
  6. csdn markdown 编辑器开启
  7. 复刻了一个史上最强 Redis 6.0 版本
  8. secp256k1 php,区块链中的数学-secp256k1 签名可锻性以及解决方案
  9. sqlalchemy 初始化数据库
  10. this绑定丢失的问题
  11. H53D旋转-遁地龙卷风
  12. 10、网友问答之串口字节方式传递单精度数--------labview宝典
  13. 从“果链”到新能源,立讯精密的B端生意成色几何?
  14. PS进阶篇——如何PS软件给衣服换个颜色或图案风格(七)
  15. Darknet官方文档(含Yolo-V2和V3在win和Linux训练测试步骤、计算mAP、调参优化等)
  16. 思维导图工具之Mindmeister
  17. java微信开发者模式开发_微信开发之启用开发者模式(三)
  18. 记一次生产环境java服务mqtt连接线程数过多的处理过程
  19. 水平导航栏和垂直导航栏
  20. Apache Hue基础知识大全

热门文章

  1. JSP中Idea下载Tomcat教程
  2. java的苹果端接口_基于JAVA的苹果序列号查询api调用代码实例
  3. 计算机控制系统余,可降级的三冗余同步表决计算机控制系统及方法
  4. Spring事务案例:模拟银行转账
  5. SAP顾问学院-行业信息化解决方案 [转]
  6. 华硕顽石电脑共享名和计算机名称,华硕笔记本共享WIFI给手机上网功能的方法(图文教程)...
  7. wps共享文件怎么多人编辑?
  8. 《万王之王3》主题歌歌词有奖大征集
  9. Elasticsearch教程(27) ES拼接查询条件的工具类
  10. winform图文编辑器三个开源项目