Background

刚接触ElasticSearch不久,公司让我帮忙去导一下数据,刚开始数量并不是很大,我都是用Elasticsearch python的api接口,一条一条数据去往新的index里插. 但是马上又有了千万级别的数据需要操作,如果还是老办法,会特别慢,而且不够稳定。于是去查了一下资料。关于Elasticsearch的python api文档很少,中文的就更少了,官方稳定又不是很详细,只是大概得到一个信息,可以用bulk() api去操作大量的数据。

Solution:

我需要解决的问题有两个:

查询多个Index中的内容,然后将满足条件的数据写到新的一个Index中:

这个问题比较简单,elasticsearch 的helpers module提供了一个完美的方法来做这件事:reindex()

elasticsearch.helpers.reindex(client, source_index, target_index, query=None,target_client=None, chunk_size=500, scroll=u'5m', scan_kwargs={}, bulk_kwargs={})

这个方法的参数,提供了source_index(可以是List), target_index, query以及 scroll_size 和 scroll的保存时间,所以直接跑就可以了。

批量更新现有Index中的所有数据,给每个document增加一个field并赋值:

官方文档中的api 签名是这样的:

elasticsearch.helpers.bulk(client, actions, stats_only=False, **kwargs)

我一直没搞明白actions是什么类型的参数,以为是个函数类行的参数,后来看了一下源码,发现其实是一个List, 而且是要被操作的document的集合,官方文档上显示是要满足这个样子,跟search()返回的结果格式一样:

{ '_index': 'index-name', '_type': 'document', '_id': 42, '_parent': 5, '_ttl': '1d', '_source': { "title": "Hello World!", "body": "..." }}

但是又说:The bulk() api accepts index, create, delete, and update actions. Use the _op_type field to specify an action (_op_type defaults to index):

{ '_op_type': 'delete', '_index': 'index-name', '_type': 'document', '_id': 42,}{ '_op_type': 'update', '_index': 'index-name', '_type': 'document', '_id': 42, 'doc': {'question': 'The life, universe and everything.'}}

我在自己的数据上加了"_op_type":"update", 然后运行一直出错:

TransportError(400, u'action_request_validation_exception',u'Validation Failed: 1: script or doc is missing

直到我尝试着删掉"_op_type"这个字段,终于运行成功了。以下是我的代码:

def queryInES( esinstance):

search_body={"query":{"match_all":{}}}

page = esinstance.search(index='my_index', body=search_body, search_type='scan', doc_type='Tweet', scroll='5s', size=1000)

sid=page['_scroll_id']

scroll_size = page['hits']['hits']

while(scroll_size>0):

pg = es.scroll(scroll_id=sid, scroll='30s')

scroll_size = len(pg['hits']['hits'])

print "scroll size: " + str(scroll_size)

sid = pg['_scroll_id']

data=pg['hits']['hits']

... ...

for i in range(0, scroll_size):

data[i]['_source']['attributes']['senti']={"label":label, "score": score, "confidence": confidence}

helpers.bulk(client=esinstance, actions=data)

python elasticsearch bulk_关于ElasticSearch Bulk的用法相关推荐

  1. linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析

    一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...

  2. Elasticsearch:使用 Elasticsearch 和 BERT 构建搜索引擎 - TensorFlow

    在本文中,我们使用预训练的 BERT 模型和 Elasticsearch 来构建搜索引擎. Elasticsearch 最近发布了带有向量场的文本相似性(text similarity search ...

  3. ElasticSearch,docker 安装ElasticSearch,Springboot 使用 ElasticSearch JavaAPI

    什么是 ElasticSearch ? 数据库查询存在的问题: 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低 关键字模糊查询比较麻烦 ElasticSearch概念 • Elas ...

  4. bulk怎么使用oracle,oracle学习之bulk collect用法

    通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...

  5. Elasticsearch:理解 Elasticsearch Percolate 查询

    这篇博文深入探讨了 Elasticsearch 的 percolate query.此机制允许你根据已注册的查询对文档进行分类或标记.起初听起来很奇怪的是一个强大的机制,我们将在这篇文章中深入探讨. ...

  6. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  7. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  8. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  9. python语言if语句-Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...

最新文章

  1. Ajax跨域:Jsonp原理解析
  2. IIS没有.net版本选择标签问题
  3. 数组的最长平台c语言,2010台湾省C语言版高级
  4. Java面向对象编程篇5——枚举
  5. 奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线
  6. 物联网安全白皮书_天翼物联网安全白皮书发布 有方科技参与编纂
  7. php采集单线程卡死,php - 为什么我这段curl采集,单线程比多线程还快?
  8. 都有数据一直报空指针_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)...
  9. 《游戏改变企业》一一第 2 章 实时的经济信息反馈(为什么游戏很重要) 游戏改变企业...
  10. php foreach 过滤条件_PHP+Redis实现延迟任务实现完成订单
  11. 28万个开源项目之番外篇
  12. 自制solidworks图框步骤_SolidWorks教你如何快速制作工程图模板
  13. 草根创业,我劝你抓住网络培训的机会!
  14. android闹铃唤醒软件,温柔唤醒闹钟app_温柔的闹钟铃声有哪些_华为智能闹钟智能唤醒-多特软件站安卓网...
  15. python访问局域网共享文件夹
  16. 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
  17. 北京数字认证股份有限公司-数字证书认证管理解决方案
  18. Linux网络:物理层 | 数据通信 | 基带频带 | 信源编码 | 射频 | 调制
  19. 分析OpenSL回声Demo
  20. 【机器码】原码、反码、补码的学习

热门文章

  1. Android 百分比布局、权重、隐藏TitleBar、引入自定义控件
  2. 全志H616——刷机以及初步配置
  3. Dx 10 与 Dx 9 的一些技术区别
  4. 谷歌PR权重 Google PR与百度权重
  5. vue实现pc端扫码登录
  6. Linuxftp服务
  7. kafka中文教程(一)
  8. [QMT]01-我的第一个Python策略
  9. 利用计算机建模的优点,论计算机技术在数学建模领域的应用
  10. 【软件安装】金蝶安装指南