9

Python pyesモジュールを使用して6Mレコードのcsvファイルをelasticsearchにインデックス付けしようとしています.コードはレコードを1行ずつ読み取り、elasticsearchにプッシュします.これを一括送信する方法はありますか?

import csv
from pyes import *
import sys

header = ['col1','col2','col3','col3', 'col4', 'col5', 'col6']

conn = ES('xx.xx.xx.xx:9200')

counter = 0

for row in reader:
    #print len(row)
    if counter >= 0:
        if counter == 0:
            pass
        else:
            colnum = 0
            data = {}
            for j in row:
                data[header[colnum]] = str(j)
                colnum += 1
            print data
            print counter
            conn.index(data,'accidents-index',"accidents-type",counter)
    else:
        break

    counter += 1
4

1 に答える 1

12

pyelasticsearchは、一括インデックス作成をサポートしています。

bulk_index(index, doc_type, docs, id_field='id', parent_field='_parent'[, other kwargs listed below])

例えば、

cities = []
for line in f:
    fields = line.rstrip().split("\t")
    city = { "id" : fields[0], "city" : fields[1] }
    cities.append(cities)
    if len(cities) == 1000:
        es.bulk_index(es_index, "city", cities, id_field="id")
        cities = []
if len(cities) > 0:
    es.bulk_index(es_index, "city", cities, id_field="id")
于 2013-10-10T15:58:34.673 に答える