Elasticsearch使用Python API做bulk insert的另一种方法

以前写过一个bulk insert,这次又查了下资料,看到另一种做法,说bulk里保存的是一段JSON数据序列,按照<操作><数据><操作><数据><操作><数据>...的格式保存的。感觉比较古怪,自己写了一段python代码测试了一下,还能work。应该有更好的解决方法,但这种dirty code做做实验也够了。

#ESIP = 'localhost'
ESIP = '192.168.0.2'
index_name = 'testindex'
doc_type_name = 'testindex_data1'

#init Elasticsearch
es = Elasticsearch([{'host':ESIP}])
es.create(index=index_name, doc_type=doc_type_name, body={'any':'data', 'timestamp':datetime.now()})

#read spreedsheet data terminated by comma
data = []
fd = codecs.open('test.csv', 'r', 'utf-8')
for line in fd:
	line = line.strip().split(',')
	json_data = {}
	json_data['id'] = line[1]
	json_data['data'] = line[1]
	data.append(json_data)

#bulk insert
cache = []
bulk_size = 500
for d in data:
	if len(cache) >= bulk_size:			
		es.bulk(body = cache, index=index_name, doc_type=doc_type_name)			
		cache = []
	else:
		new_action = {}
		new_action['_index'] = index_name
		new_action['_type'] = doc_type_name
		new_action['_id'] = d['id']				
		action = {}
		action['index'] = new_action		
		cache.append(action)
		cache.append(d)	
if len(cache) > 0:
	es.bulk(body = cache, index=index_name, doc_type=doc_type_name)	
	cache = []




转载于:https://my.oschina.net/u/2242064/blog/601389

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值