我必须在弹性中插入一个json数组。链接中接受的答案建议在每个json条目之前插入标题行。答案是2年,市场上有更好的解决方案吗?我需要手动编辑我的json文件吗?
is there any way to import a json file(contains 100 documents) in elasticsearch server.?
[
{
"id":9,
"status":"This is cool."
},
...
]
答案 0 :(得分:7)
好的,那么你可以使用简单的shell脚本做一些非常简单的事情(见下文)。我们的想法是不必手动编辑您的文件,但让Python执行此操作并创建另一个文件,其格式符合_bulk
endpoint所期望的内容。它执行以下操作:
_bulk
端点。_bulk
端点<强> bulk.sh:强>
#!/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
你需要:
bulk.sh
文件中并chmod it(即chmod u+x bulk.sh
)./bulk.sh