使用Python在elasticsearch中索引JSON文件?

ans*_*haj 5 python json elasticsearch elasticsearch-dsl

我有一堆JSON文件(100个),它们被命名为merged_file 1.json、merged_file 2.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)
Run Code Online (Sandbox Code Playgroud)

JSON 如下所示:

{"one":["some data"],"two":["some other data"],"three":["other data"]}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使这个正确?

Hon*_*rál 8

对于此任务,您应该使用elasticsearch-py( pip 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')
Run Code Online (Sandbox Code Playgroud)

  • 如果您关心 ids(否则,elasticsearch 会为您创建随机的),只需在您的 json 中有一个 `_id` 字段,或者直接将文件名放在那里或其他东西 (2认同)