2017-05-15 5 views
0

Ich habe eine Reihe von JSON-Dateien (100), die als merged_file 1.json, fusionierte_datei 2. json und so weiter benannt werden.Index JSON-Dateien in elasticsearch mit Python?

Wie indexiere ich all diese Dateien in elasticsearch mit Python (elasticsearch_dsl)?

ich diesen Code verwende, aber es scheint nicht zu funktionieren:

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) 

Die JSON sieht wie folgt aus:

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

Was kann ich tun dies richtig zu machen?

+0

zeigen Ihnen, wie jsondocs aussieht? –

+0

Ihnen fehlt die Befehlszeile vor jedem Dokument. Siehe [hier] (https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-bulk) für weitere Details. – Val

+0

@BhargaviSri - Hinzugefügt – anshaj

Antwort

1

Für diese Aufgabe Sie elasticsearch-py (pip install elasticsearch) verwenden sollte:

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

Wie bekomme ich die IDs der jsons, die indiziert sind? – anshaj

+0

Wenn Sie sich für die IDs interessieren (elasticsearch wird für Sie sonst zufällige erzeugen), haben Sie einfach ein '_id' Feld in Ihrem json entweder direkt oder vielleicht den Dateinamen dort oder etwas –

Verwandte Themen