Как вставить уже созданную строку в формате json в Elasticsearch Bulk
В скрипте Python,
Я пытаюсь для asticsearch.helpers.bulk для хранения нескольких записей.
Я получу строку в формате json из другого программного обеспечения и хочу прикрепить ее в исходной части
Я получил формат helpers.bulk по этому ответу
часть моего кода:
def saveES(output,name):
es = Elasticsearch([{'host':'localhost','port':9200}])
output = output.split('\n')
i=0
datas=[]
while i<len(output):
data = {
"_index":"name",
"_type":"typed",
"_id":saveES.counter,
"_source":[[PROBLEM]]
}
i+=1
saveES.counter+=1
datas.append(data)
helpers.bulk(es, datas)
Я хотел бы прикрепить строку в формате json в [[ПРОБЛЕМА]]
Как я могу прикрепить его? Я старался, но это не выводится в правильном..
если я использую:
"_source":{
"image_name":'"'+name+'",'+output[i]
}
и результат печати данных:
{'_type': 'typed', '_id': 0, '_source': {'image_name': '"nginx","features": "os,disk,package", "emit_shortname": "f0b03efe94ec", "timestamp": "2017-08-18T17:25:46+0900", "docker_image_tag": "latest"'}, '_index': 'name'}
Этот результат показывают, что объединены в одну строку.
но я ожидаю:
{'_type': 'typed', '_id': 0, '_source': {'image_name': 'nginx','features': 'os,disk,package', 'emit_shortname': 'f0b03efe94ec', 'timestamp': '2017-08-18T17:25:46+0900', 'docker_image_tag': 'latest'}, '_index': 'name'}
1 ответ
В вашем коде много проблем.
- Вы переопределяете значение
data
в вашей петле - Вы не уважаете никаких норм (Pesp8 и прочее)
- Вы пока вместо списка понимания
- Вы создали 2 бесполезные переменные
- Вы создаете свои функции в своей функции
Вот ваш улучшенный код
es = Elasticsearch([{'host':'localhost','port':9200}]) # You don't have to initialise this variable every time you are calling the function but only once.
def save_es(output,es): # Peps8 convention
output = output.split('\n') # you don't need a while loop. A comprehension loop will avoid a lot of trouble
data = [ # Please without s in data
{
"_index": "name",
"_type": "typed",
"_id": index,
"_source": {
"image_name":"name" + name}
}
for index, name in enumerate(output)
]
helpers.bulk(es, data)
save_es(output, es)
Надеюсь, это поможет.