将JSON文件导入/索引到Elasticsearch

我是Elasticsearch的新手,直到现在都已经手动input数据。 例如,我做了这样的事情:

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{ "user" : "kimchy", "post_date" : "2009-11-15T14:12:12", "message" : "trying out Elastic Search" }' 

我现在有一个.json文件,我想索引到Elasticsearch。 我试过这样的事情没有成功:

 curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json 

如何导入.json文件? 我需要先采取哪些步骤来确保映射是正确的?

如果你想使用curl文件,正确的命令是这样的:

 curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d @lane.json 

elasticsearch是无模式的,因此你不一定需要映射。 如果您发送JSON,并使用默认映射,则每个字段都将使用标准分析器进行索引和分析。

如果你想通过命令行与elasticsearch进行交互,你可能需要看一下弹性壳应该比curl更容易一些。

根据当前的文档, http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html:

如果您要提供文本文件input来curl,则必须使用–data-binary标志而不是plain -d。 后者不保留换行符。

例:

 $ curl -s -XPOST localhost:9200/_bulk --data-binary @requests 

我们为这种types的东西做了一个小工具https://github.com/taskrabbit/elasticsearch-dump

加上KenH的回答

 $ curl -s -XPOST localhost:9200/_bulk --data-binary @requests 

您可以用@requestsreplace@complete_path_to_json_file

注意: @在文件path之前是重要的

只需从https://www.getpostman.com/docs/environments获取邮差就可以用/ test / test / 1 / _bulk?pretty命令给它提供文件位置。 在这里输入图像说明

您正在使用

 $ curl -s -XPOST localhost:9200/_bulk --data-binary @requests 

如果“请求”是一个JSON文件,那么你必须改变这个

 $ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json 

在此之前,如果你的json文件没有被索引,你必须在json文件中的每一行之前插入一个索引行。 你可以用JQ来做到这一点。 请参阅下面的链接: http : //kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html

去elasticsearch教程(例如莎士比亚的教程),并下载使用的JSON文件示例,并看看它。 在每个json对象(每个单独的行)前面都有一个索引行。 这是你使用jq命令后要查找的内容。 这种格式是必须使用批量API,普通的JSON文件不会工作。

如果你正在使用VirtualBox和UBUNTU,或者你只是使用UBUNTU,那么它可以是有用的

 wget https://github.com/andrewvc/ee-datasets/archive/master.zip sudo apt-get install unzip (only if unzip module is not installed) unzip master.zip cd ee-datasets java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader 

有一件事我没有看到任何人提到: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"} 

没有这个,没有什么可行的,它不会告诉你为什么