Sha*_*ler 79 json elasticsearch
我是Elasticsearch的新手,并且一直在手动输入数据,直到此时为止.例如,我做过这样的事情:
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
Run Code Online (Sandbox Code Playgroud)
我现在有一个.json文件,我想把它编入Elasticsearch.我也尝试过类似的东西,但没有成功:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
Run Code Online (Sandbox Code Playgroud)
如何导入.json文件?是否需要先采取步骤以确保映射正确?
jav*_*nna 79
如果你想使用curl文件,正确的命令是这样的:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Run Code Online (Sandbox Code Playgroud)
Elasticsearch是无模式的,因此您不一定需要映射.如果按原样发送json并使用默认映射,则将使用标准分析器对每个字段进行索引和分析.
如果您想通过命令行与Elasticsearch进行交互,您可能需要查看一下应该比curl 更有用的弹壳.
小智 25
根据当前的文档,http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html :
如果要为curl提供文本文件输入,则必须使用--data-binary标志而不是plain -d.后者不保留换行符.
例:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Run Code Online (Sandbox Code Playgroud)
Eva*_*van 14
我们为这类事物制作了一个小工具https://github.com/taskrabbit/elasticsearch-dump
Mos*_*ada 10
我是elasticsearch_loader的作者,
我为这个确切的问题写了ESL。
您可以通过pip下载它:
pip install elasticsearch-loader
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过发出以下命令将json文件加载到elasticsearch中:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
Run Code Online (Sandbox Code Playgroud)
加入KenH的答案
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Run Code Online (Sandbox Code Playgroud)
您可以替换@requests使用@complete_path_to_json_file
注意:@在文件路径之前很重要
我只是确保我和json文件位于同一目录中,然后简单地运行它
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json
Run Code Online (Sandbox Code Playgroud)
因此,如果您也要确保您位于同一目录中,并以这种方式运行它。注意:命令中的product / default /是我的环境特有的。您可以忽略它或将其替换为与您相关的任何东西。
从https://www.getpostman.com/docs/environments获取邮递员,用/ test/test/1/_bulk?pretty命令给它文件位置.

我还没有看到有人提到的一件事:JSON文件必须为“纯” JSON文件的每一行指定一行,以指定下一行所属的索引。
IE浏览器
{"index":{"_index":"shakespeare","_type":"act","_id":0}}
{"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
Run Code Online (Sandbox Code Playgroud)
没有那个,什么都行不通,也不会告诉你为什么
小智 5
您正在使用
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Run Code Online (Sandbox Code Playgroud)
如果“ requests”是一个json文件,则必须将其更改为
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json
Run Code Online (Sandbox Code Playgroud)
现在在此之前,如果您的json文件未建立索引,则必须在json文件中的每一行之前插入一个索引行。您可以使用JQ做到这一点。请参考以下链接:http : //kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
转到elasticsearch教程(莎士比亚教程示例)并下载使用的json文件示例并进行查看。在每个json对象(每行)的前面都有一个索引行。这是使用jq命令后要寻找的东西。要使用批量API,此格式是强制性的,纯json文件将无法使用。
| 归档时间: |
|
| 查看次数: |
194795 次 |
| 最近记录: |