Массовая индексация Elasticsearch JSON с использованием Python - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть огромное количество данных в одном JSON, и я хочу передать их в Elasticsearch для выполнения некоторых визуализаций в Kibana. Мой JSON сейчас выглядит примерно так:

[{"field1": "x", "field2": "y"},
{"field1": "w", "field2": "z"}]
...etc

Проведя некоторые исследования, я обнаружил, что лучший способ передать эти данные в Elasticsearch - это использовать Bulk API, но сначала мне нужно переформатировать мои данные, чтобы они выглядели так:

{"index":{"_index": "myindex", "type": "entity_type", "_id": 1}}
{"field1": "x", "field2": "y"}
{"index":{"_index": "myindex", "type": "entity_type", "_id": 2}}
{"field1": "w", "field2": "z"}
...etc

А потом я должен опубликовать этот файл, используя curl.

Все это является частью более крупного проекта Python, поэтому я хотел бы знать, как лучше всего выполнить переформатирование моих данных и как передать их в Elasticsearch с использованием Python. Я думал об использовании регулярных выражений для переформатирования (re.sub и replace), а также посмотрел на объемный помощник эластичного поиска для публикации данных, но не смог найти решение.

Любая помощь высоко ценится, спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

Hy!

Согласно https://elasticsearch -py.readthedocs.io / en / master / helpers.html # example , в библиотеке python есть пара помощников для операции bulk.

Например, для вашего случая вы можете использовать следующий код:

def gendata():
    docs = [{"field1": "x", "field2": "y"},{"field1": "w", "field2": "z"}]
    for doc in docs:
        yield {
            "_op_type":"index",
            "_index": "docs",
            "_type": "_doc",
            "doc": doc
        }

bulk(es, gendata())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...