2017-05-15 51 views
0

我有一堆JSON文件(100),它們被命名爲merged_file 1.json,merged_file 2.json等等。使用Python在elasticsearch中索引JSON文件?

如何使用python(elasticsearch_dsl)將所有這些文件編入elasticsearch?

我使用此代碼,但它似乎並沒有工作:

from elasticsearch_dsl import Elasticsearch 
import json 
import os 
import sys 

es = Elasticsearch() 

json_docs =[] 

directory = sys.argv[1] 

for filename in os.listdir(directory): 
    if filename.endswith('.json'): 
     with open(filename,'r') as open_file: 
      json_docs.append(json.load(open_file)) 

es.bulk("index_name", "type_name", json_docs) 

的JSON看起來是這樣的:

{"one":["some data"],"two":["some other data"],"three":["other data"]} 

我能做些什麼使這正確嗎?

+0

可以顯示jsondocs怎麼樣子? –

+0

您在每個文檔之前缺少命令行。有關更多詳細信息,請參見[https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-bulk]。 – Val

+0

@BhargaviSri - 新增 – anshaj

回答

1

對於這個任務,你應該使用elasticsearch-pypip install elasticsearch):

from elasticsearch import Elasticsearch, helpers 
import sys, json 

es = Elasticsearch() 

def load_json(directory): 
    " Use a generator, no need to load all in memory" 
    for filename in os.listdir(directory): 
     if filename.endswith('.json'): 
      with open(filename,'r') as open_file: 
       yield json.load(open_file) 

helpers.bulk(es, load_json(sys.argv[1]), index='my-index', doc_type='my-type') 
+0

我如何獲得編入索引的jsons的id? – anshaj

+0

如果你關心ID(elasticsearch將會爲你創建隨機的),直接在你的json中有一個'_id'字段,或者可以把文件名放在那裏 –

相關問題