logstash导入csv或数据库数据到elasticsearch

一、导入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"
    }
}

通过 sudo ./bin/logstash -f poi.conf --config.reload.automatic 命令导入

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值