我必须在ElasticSearch中存储一些与我的python程序集成的消息.现在我尝试存储消息的是:
d={"message":"this is message"}
for index_nr in range(1,5):
ElasticSearchAPI.addToIndex(index_nr, d)
print d
Run Code Online (Sandbox Code Playgroud)
这意味着如果我有10条消息,那么我必须重复我的代码10次.所以我想做的是尝试制作脚本文件或批处理文件.我已经检查了ElasticSearch指南,可以使用BULK API.格式应如下所示:
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "type1", …Run Code Online (Sandbox Code Playgroud) 我有一个简单的python脚本,用于索引包含100万行的CSV文件:
import csv
from pyes import *
reader = csv.reader(open('data.csv', 'rb'))
conn = ES('127.0.0.1:9200', timeout=20.0)
counter = 0
for row in reader:
try:
data = {"name":row[5]}
conn.index(data,'namesdb',counter, bulk=True)
counter += 1
except:
pass
Run Code Online (Sandbox Code Playgroud)
这很有效但是当我们进入成千上万时,它们都会成倍地减速.
我猜测如果我在较小的块中做了索引,ES会表现得更好.
有更有效的方法吗?sleep()延迟会有帮助吗?或者是否有一种简单的方法可以通过编程方式将csv分解为更小的块?
谢谢.