Индексировать пандас-фрейм данных в Elasticsearch без эластичного поиска

Я хотел бы проиндексировать кучу больших фреймов данных панд (несколько миллионов строк и 50 столбцов) в Elasticsearch.

При поиске примеров того, как это сделать, большинство людей будут использоватьМетод массового помощника эластичного поиска-pyпередавая экземпляркласса Elasticsearch который обрабатывает соединение, а также список словарей, который создаетсяс помощью метода pandas dataframe.to_dict (orient = 'records'), Метаданные могут быть заранее вставлены в кадр данных в виде новых столбцов, например,df['_index'] = 'my_index' и т.п.

Однако у меня есть причины не использовать библиотекуasticsearch-py, и я хотел бы поговорить сElasticsearch навальный API непосредственно, например с помощьюЗапросы или другую удобную библиотеку HTTP. Кроме того,df.to_dict() К сожалению, на больших фреймах данных происходит очень медленно, и конвертирование фрейма данных в список диктов, который затем сериализуется в JSON с помощьюластиком упругости поиска, звучит как ненужные издержки, когда есть что-то вродеdataframe.to_json () что довольно быстро даже на больших фреймах данных.

Каким будет простой и быстрый способ перевода кадра данных pandas в формат, необходимый для массового API? Я думаю, что шаг в правильном направлении используетdataframe.to_json() следующее:

import pandas as pd
df = pd.DataFrame.from_records([{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}])
df
   a  b
0  1  2
1  3  4
2  5  6
df.to_json(orient='records', lines=True)
'{"a":1,"b":2}\n{"a":3,"b":4}\n{"a":5,"b":6}'

Теперь это строка JSON, разделенная символом новой строки, однако в ней по-прежнему отсутствуют метаданные. Каков был бы эффективный способ получить это там?

редактировать: Для полноты документ JSON метаданных будет выглядеть так:

{"index": {"_index": "my_index", "_type": "my_type"}}

Следовательно, в итоге весь JSON, ожидаемый массовым API, будет выглядеть следующим образом (с дополнительным переводом строки после последней строки):

{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":1,"b":2}
{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":3,"b":4}
{"index": {"_index": "my_index", "_type": "my_type"}}
{"a":5,"b":6}

Ответы на вопрос(2)

Ваш ответ на вопрос