使用logstash将数据从mysql导入到elasticsearch

时间:2017-08-03 11:31:56

标签: mysql elasticsearch logstash logstash-jdbc

我想将我的MySQL数据库中的数据导入带有logstash的elasticsearch。我已经能够导入自定义查询结果,但我错过了我可以定义logstash创建的索引的映射/设置的点。另外,我不知道如何使用一对多关系导入数据。

到目前为止,这是我的logstash.conf:

input {
jdbc {
    jdbc_connection_string => "jdbc:mysql://localhost:3306/shop"
    jdbc_user => "root"
    jdbc_password => ""
    jdbc_driver_library => "C:\Users\curUser\Desktop\mysql-connector-java-5.1.42\mysql-connector-java-5.1.42-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"

    statement => "SELECT * FROM variants var"
    }
}

output {
elasticsearch {
    hosts => "localhost:9200"
    index => "search"
    document_type => "variants"
    document_id => "%{id}"
    }
}

注意:我想使用logstash将数据导入elasticsearch。这是一个网上商店,所以我必须在字段上使用一些分析器

2 个答案:

答案 0 :(得分:0)

我查看了LogStash的ES插件文档 - 不确定这是否可行。

但是,您可以在运行LogStash之前设置索引映射。您可以通过使用cURL放置索引映射来实现,也可以使用LogStash来执行此HTTP请求

参见https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.htmlhttps://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

答案 1 :(得分:0)

  1. 对于映射/设置,您可以使用Elasticsearch rest API
  2. 创建映射/设置后,请在logstash.conf文件中使用相同的索引名
  3. 如果您的表(SELECT * FROM variants var)有很多列,并且您不想导入所有列,请使用增变器删除不需要的列:

    filter { mutate {  remove_field => ["@version", "@timestamp", "column"]}}
    
  4. 如果要重命名列,请使用:

    filter { mutate {  rename => { "id" => "ID" }}}
    
  5. 可以像添加选择查询一样添加联接查询。