一、导入csv数据
准备三个文件——"*"需要自己命名
1. csv文件
2. *.json es模板
{
"order": 303,
"version": 6100,
"index_patterns": [
"poi*"
],
"settings": {
"index.refresh_interval": -1,
"number_of_shards": 1,
"number_of_replicas": 0,
"similarity": {
"my_bm25": {
"type": "BM25",
"b": "0.5"
}
}
},
"mappings": {
"_doc": {
"properties": {
"name": {
"type": "text",
"index":true,
"similarity": "my_bm25"
},
"address": {
"type": "text",
"index":true,
"similarity": "my_bm25"
},
"location": {
"index": false,
"type": "geo_point"
},
"id": {
"index": true,
"type": "keyword"
}
}
}
}
}
3. logstash导入所需*.conf文件
input {
file{
path=>["/地址/文件名.csv"]
#从每个文件的开头读取内容(每行也可以被称为事件)
start_position => "beginning"
#logstash默认不处理一天前的文件
#ignore_older => 87400
#sincedb_path => "/dev/null"
}
}
# 处理/过滤部分 处理每一个事件(或叫作每一行内容)
filter{
# 过滤的时候,先使用变异插件mutate去掉message字段内容中的换行符
mutate{
gsub=>[ "message", "\\N", "" ]
}
# 然后使用csv插件
csv{
# 指定事件中的message字段,是进行csv过滤操作时的字段
source => "message"
# 每行source/message中 不同字段 之间的分割符是什么
separator => ","
# 由于第一行是csv头部,所以需要跳过开头
skip_header => true
# 可以理解为:使用分隔符分开后,对每个字段进行重命名
columns => ["id","lng","lat"]
# 增加一个location字段
add_field =>{"location"=>"%{lat},%{lng}"}
# 删除不需要的字段
remove_field => ["lng","lat"]
}
}
# 输出部分
output{
elasticsearch {
#1. es集群的地址,也可以是nginx代理过得es集群地址的域名
hosts => ["http://127.0.0.1:9688"]
#2. 指定输出到哪个索引上,下面的值也可以换成动态的形式,
#例如 index => "poi_%{id}",表示要将此条poi数据输出到,poi数据所属的城市对应的索引当中
index => "poi_%{id}"
#3. 数据存储到ES后生成的文档id,由自己指定还是通过ES自动生成:若不指定,ES会自动生成一个uuid;若想执行指定,可参考上方的uuid插件生成一个
document_id => "%{id}"
#4. 数据放到索引下的哪个类型当中
document_type=>"_doc"
#5. 指定一份自定义的模板文件
# 5.1 ES中存储的每一个文档可由多个字段构成的,而每个字段可以有不同的类型,例如geo_point、text、keyword类型等
# 5.2 经过input、filter环节之后,每个事件都可以留下与ES文档字段相对应的几个字段
# 5.3 在此自定义一份json模板,使得事件中的各字段按照模板中(:模板使用于哪些索引、索引的基本设置、字段的类型设置等)的设置导入到相应的索引中,并完成对文档中各个字段类型的设置
# 启动自定义模板管理的方式
manage_template => true
# 如果ES中有相同名称的模板_setting,进行覆盖
template_overwrite => true
# 模板的位置
template =>"/home/地址/名称.json"
# 模板所自定义的名称
template_name => "poi_sj"
# ecs_compatibility=>disabled
}
}
通过 sudo ./bin/logstash -f poi.conf --config.reload.automatic 命令导入
二、导入数据库中数据
准备
1. *.json es模板
2. 要执行的*.sql文件
3. 驱动——我用的是pg数据库:postgresql-42.2.19.jar
4.对比导入csv改动较大的*.conf文件,主要为input部分改变
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://127.0.0.1:5432/库名?currentSchema=public"
jdbc_user => "用户名"
jdbc_password => "密码"
jdbc_driver_library => "/地址/postgresql-42.2.19.jar"
jdbc_driver_class => "org.postgresql.Driver"
#要执行sql地址
statement_filepath => "地址/*.sql"
}
}