在elasticsearch中插入多个文档

我必须在弹性中插入一个json数组。链接中可接受的答案建议在每个json条目之前插入标题行。答案是2岁,市场上是否有更好的解决方案?我需要手动编辑json文件吗?

[

{

"id":9,

"status":"This is cool."

},

...

]

回答:

好的,那么您可以使用简单的Shell脚本来完成一些非常简单的操作(请参见下文)。这个想法是不必手动编辑文件,而是让Python进行编辑并创建另一个文件格式符合_bulk端点期望的文件。它执行以下操作:

  1. 首先,我们声明一个小的Python脚本,该脚本读取您的JSON文件并创建一个具有所需文件格式的新脚本以发送到_bulk端点。
  2. 然后,我们运行该Python脚本并存储批量文件
  3. 最后,我们_bulk使用简单的curl命令将在第2步中创建的文件发送到端点
  4. 到这里,您现在有了一个包含文档的新ES索引

#!/bin/sh

# 0. Some constants to re-define to match your environment

ES_HOST=localhost:9200

JSON_FILE_IN=/path/to/your/file.json

JSON_FILE_OUT=/path/to/your/bulk.json

# 1. Python code to transform your JSON file

PYTHON="import json,sys;

out = open('$JSON_FILE_OUT', 'w');

with open('$JSON_FILE_IN') as json_in:

docs = json.loads(json_in.read());

for doc in docs:

out.write('%s\n' % json.dumps({'index': {}}));

out.write('%s\n' % json.dumps(doc, indent=0).replace('\n', ''));

"

# 2. run the Python script from step 1

python -c "$PYTHON"

# 3. use the output file from step 2 in the curl command

curl -s -XPOST $ES_HOST/index/type/_bulk --data-binary @$JSON_FILE_OUT

你需要:

  1. 将以上脚本保存在bulk.sh文件中并对其进行chmod处理(即chmod u+x bulk.sh
  2. 修改ordre顶部(步骤0)的三个变量以匹配您的环境
  3. 使用运行它 ./bulk.sh

以上是 在elasticsearch中插入多个文档 的全部内容, 来源链接: utcz.com/qa/422856.html

回到顶部