2017-04-01 70 views
0

我正試圖將所有的json導入到我的elasticsearch中。爲此,我嘗試了curl命令,但沒有用,因爲它開始給出解析錯誤。
這是我的嘗試:如何使用Logstash或curl將數據提供給ElasticSearch?

curl -XPOST "http://localhost:9200/test" -d "@test.json" 
curl -XPOST "http://localhost:9200/test/_bulk" -d "@test.json" 
curl -XPOST "http://localhost:9200/test/_bulk" --data-binary "@test.json" 
curl -s -XPOST "http://localhost:9200/test/_bulk" --data-binary "@test.json" 

等諸多嘗試。但我得到的是Parsing error。因此想知道彈性搜索我的所有記錄的方法是什麼?
此外,如果有人可以幫助我用logstash解決它,那麼它將是一個很大的幫助。請讓我知道最好的建議。
以下是JSON中的示例數據,它可能用換行符分隔。 Sample Data
以下是錯誤:

{ 
    "error" : { 
    "root_cause" : [ 
     { 
     "type" : "parse_exception", 
     "reason" : "Failed to derive xcontent" 
     } 
    ], 
    "type" : "parse_exception", 
    "reason" : "Failed to derive xcontent" 
    }, 
    "status" : 400 
} 

回答

2

你需要改變你的JSON這樣的:

{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 
{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 
{ "index" : { "_index" : "test", "_type" : "type" } } 
{"data":...} 

然後你可以運行:

curl -s -H "Content-Type: application/x-ndjson" -XPOST localhost:9200/_bulk --data-binary "@test.json" 

瞭解更多關於Bulk API

如果您希望使用Logstash做到這一點,您可以使用stdin inputjson filter,然後使用elasticsearch output。喜歡的東西(未測試):

input { 
    stdin { } 
} 

filter { 
    json { 
    source => "message" 
    } 

    mutate { 
    remove_field => [ "message" ] 
    } 
} 

output { 
    elasticsearch { 
    } 
} 

然後啓動:

cat test.json | bin/logstash -f logstash.conf 

我希望這有助於。

+0

沒有logstash會這樣做 – dadoonet

+0

順便說一句,如果你將文件分割成多個文件,比如每個文件一個JSON文件,你可以使用https://github.com/dadoonet/fscrawler項目。 – dadoonet

+0

有這個選項:https://github.com/dadoonet/fscrawler#indexing-json-docs – dadoonet

相關問題