如何将已经创建的 json 格式字符串插入到 Elasticsearch Bulk



在python脚本中,

我正在尝试使用elasticsearch.helpers.bulk来存储多个记录。

我将从另一个软件获得一个 json 格式的字符串,我想将其附加到源部分中

我通过这个答案得到了助手.批量格式

我的部分代码:

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的值
  2. 你不尊重任何规范(Pesp8 之类的(
  3. 你在 而不是理解列表
  4. 您创建了 2 个无用的变量
  5. 你在函数中实例化你的 es

这是您改进的代码

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)

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新