python elasticsearch bulk_关于ElasticSearch Bulk的用法
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的用法相关推荐
- linux下载python的es库,Elasticsearch py客户端库安装及使用方法解析
一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...
- Elasticsearch:使用 Elasticsearch 和 BERT 构建搜索引擎 - TensorFlow
在本文中,我们使用预训练的 BERT 模型和 Elasticsearch 来构建搜索引擎. Elasticsearch 最近发布了带有向量场的文本相似性(text similarity search ...
- ElasticSearch,docker 安装ElasticSearch,Springboot 使用 ElasticSearch JavaAPI
什么是 ElasticSearch ? 数据库查询存在的问题: 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低 关键字模糊查询比较麻烦 ElasticSearch概念 • Elas ...
- bulk怎么使用oracle,oracle学习之bulk collect用法
通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...
- Elasticsearch:理解 Elasticsearch Percolate 查询
这篇博文深入探讨了 Elasticsearch 的 percolate query.此机制允许你根据已注册的查询对文档进行分类或标记.起初听起来很奇怪的是一个强大的机制,我们将在这篇文章中深入探讨. ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- python命令行参数解析OptionParser类用法实例
python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下: from opt ...
- python的编程模式-Python设计模式之状态模式原理与用法详解
本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...
- python语言if语句-Python入门教程之if语句的用法
这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下 OK分享完毕!需要Python资料的可以加QQ群:832339352 进群免费领取下面资料! ...
最新文章
- Ajax跨域:Jsonp原理解析
- IIS没有.net版本选择标签问题
- 数组的最长平台c语言,2010台湾省C语言版高级
- Java面向对象编程篇5——枚举
- 奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线
- 物联网安全白皮书_天翼物联网安全白皮书发布 有方科技参与编纂
- php采集单线程卡死,php - 为什么我这段curl采集,单线程比多线程还快?
- 都有数据一直报空指针_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)...
- 《游戏改变企业》一一第 2 章 实时的经济信息反馈(为什么游戏很重要) 游戏改变企业...
- php foreach 过滤条件_PHP+Redis实现延迟任务实现完成订单
- 28万个开源项目之番外篇
- 自制solidworks图框步骤_SolidWorks教你如何快速制作工程图模板
- 草根创业,我劝你抓住网络培训的机会!
- android闹铃唤醒软件,温柔唤醒闹钟app_温柔的闹钟铃声有哪些_华为智能闹钟智能唤醒-多特软件站安卓网...
- python访问局域网共享文件夹
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
- 北京数字认证股份有限公司-数字证书认证管理解决方案
- Linux网络:物理层 | 数据通信 | 基带频带 | 信源编码 | 射频 | 调制
- 分析OpenSL回声Demo
- 【机器码】原码、反码、补码的学习