Elasticsearch 导入数据
一、导入 JSON 数据文件
1、准备 JSON 数据
Elasticsearch 导入 JSON 数据文件时,JSON 文件的内容须以行作为分割,不能添加换行符(\n)以外的字符,且每两行作为一条文档,第一行的 _index 指明索引,_id 指明该条文档的id;第二行为具体的数据内容。如下(test.json)内容:
{"index":{"_index":"index2","_type":"type2","_id":0}}
{"age":10,"name":"jim"}
{"index":{"_index":"index2","_type":"type2","_id":1}}
{"age":16,"name":"tom"}
2、使用 _bulk 命令
_bulk API 导入的 JSON 文件需要 1 中的格式。执行如下的命令:
$ curl -H 'Content-Type: application/x-ndjson' -s -XPOST localhost:9200/_bulk --data-binary @test.json
如果是在 test.json 文件中没有指定 index、type、id 时:
$ curl -H 'Content-Type: application/x-ndjson' -s -XPOST localhost:9200/index2/type2/_bulk --data-binary @test.json
{ "index" : { } }
{"age":16,"name":"tom"}
此时id会自动生成。
此方法导入数据可借助工具,如 postman、Kibana等工具进行导入。使用 postman 发送 Http 请求的方式进行操作,具体方法不再缀述;在 Kibana 的 Dev-Tools -> Console 下也可以 _bulk API 进行操作。
二、Kibana 导入文件
该方法的 JSON 数据文件不需要添加索引和文档 id 等信息,只需要数据内容即可。如下数据:
{"name_ch": "阿贝数","name_en": "Abbe number","explain": "即倒色散系数见平均色散。"}
{"name_ch": "阿克隆磨耗试验","name_en": "Akron abrasion test","explain": "阿克隆磨耗机属于滚动式磨托机。"}
{"name_ch": "阿里特","name_en": "Alite C3S","explain": "是硅酸盐水泥中最主要的矿物成分"}
{"name_ch": "阿隆陶瓷","name_en": "ALON ceramics","explain": "氧氮化铝尖晶石体是唯..."}
{"name_ch": "阿米巴效应","name_en": "Amoeba effect","explain": "包覆燃料颗粒的核芯由低温侧向高温侧迁移的现象。"}
{"name_ch": "阿姆科铁","name_en": "Armco-iron","explain": "见工业纯铁(250页)"}
在 integrations -> Upload file,然后选择需要导入的 .json 文件,即可导入数据。
三、logstash 导入
1、导入 JSON 文件
对于普通 JSON 文件的导入,可以通过 logstash 进行导入,如下 JSON 数据(data.json):
{"age":16,"name":"tom"}
{"age":11,"name":"tsd"}
创建配置文件(json.conf):
input{
file{
path=>"/mnt/data.json"
start_position=>"beginning"
sincedb_path=>"/dev/null"
codec=>json{
charset=>"ISO-8859-1"
}
}
}
output{
elasticsearch{
hosts=>"http://192.168.200.100:9200"
index=>"jsontestlogstash"
document_type=>"doc"
}
stdout{}
}
执行
$ ./logstash -f json.conf
[2019-04-25T10:59:14,803][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2019-04-25T10:59:16,084][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
{
"name" => "tom",
"age" => 16,
"path" => "/mnt/data.json",
"@timestamp" => 2019-04-25T02:59:16.009Z,
"host" => "master",
"@version" => "1"
}
{
"name" => "tsd",
"age" => 11,
"path" => "/mnt/data.json",
"@timestamp" => 2019-04-25T02:59:16.096Z,
"host" => "master",
"@version" => "1"
}
从结果中可以看到:默认增加了几个字段。那么我们想要这几个默认生成的字段我们应该怎么么办呢,可以如下解决:
在配置文件中使用filter进行过滤:
$ cat json.conf
input{
file{
path=>"/mnt/data.json"
start_position=>"beginning"
sincedb_path=>"/dev/null"
codec=>json{
charset=>"ISO-8859-1"
}
}
}
filter{
mutate {
remove_field => "@timestamp"
remove_field => "@version"
remove_field => "host"
remove_field => "path"
}
}
output{
elasticsearch{
hosts=>"http://192.168.200.100:9200"
index=>"jsontestlogstash"
document_type=>"doc"
}
stdout{}
}
2、导入csv文件
【1】上传logstash-6.4.0.tar.gz包,解压。
# tar -zxvf logstash-5.6.3.tar.gz -C /home/elasticsearch/
【2】修改logstash配置文件
input {
file {
path => ["/home/elasticsearch/data.csv"]
start_position => "beginning"
}
}
filter {
csv {
separator => ","
columns => ["cluster","storageRate","resourceRrate","object"]
}
}
output {
elasticsearch {
hosts => ["192.168.20.20:9200"]
index => "es_data"
}
}
【3】上传csv数据文件
/home/elasticsearch/data.csv
【4】执行命令,进行数据导入
# /home/elasticsearch/logstash-6.4.0/bin/logstash -f /home/elasticsearch/import.conf
【5】页面查看数据(默认显示10条)
http://192.168.20.20:9200/es_data/_search