【问题标题】:How to update Elasticsearch data from mysql?如何从 mysql 更新 Elasticsearch 数据?
【发布时间】:2017-02-24 09:06:34
【问题描述】:

我在 mysql 上有 3 个表。

并将数据索引到elasticsearch。

它在下面工作。(logstash 配置)

input {

                 jdbc {
                jdbc_driver_library => "lib/mysql-connector-java-5.1.33.jar"
                jdbc_driver_class => "com.mysql.jdbc.Driver"
                jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
                jdbc_user => "test"
                jdbc_password => "test"
                statement => "SELECT * FROM TABLE1"
                schedule => "* * * * *"
                                        type => "table1"


                 }
    //  
    // two more inputs
    //

}

output {
                stdout {codec => rubydebug}
                if [type] == "table1" {
                        elasticsearch {
                                hosts => ["localhost:9200"]
                                                 index => "test"
                                                document_type => "%{type}"
                                                document_id => "%{id}"
                                                template => "./template"
                                                template_overwrite => true
                                 }
                }
             //
             // two more outputs
             //

}

我删除了另外两个输入和输出,从 mysql 上的 TABLE1 中删除了一些行。

并启动了logstash。

它没有更新。

所以,输入

curl -XDELETE 'http://localhost:9200/*'

然后再次重新启动logstash。

但是在 elasticsearch 上再次添加了三个具有相同行的表。

如何自动更新elasticsearch数据?

【问题讨论】:

    标签: mysql elasticsearch logstash


    【解决方案1】:

    我猜你错过了use column valuetracking column,它是在你的jdbc 输入中输入的:

    jdbc {
        jdbc_driver_library => "lib/mysql-connector-java-5.1.33.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://localhost:3306/test"
        jdbc_user => "test"
        jdbc_password => "test"
        statement => "SELECT * FROM TABLE1"
        schedule => "* * * * *"
        type => "table1"
        use_column_value => true
        tracking_column => "id"  <-- this should be the incrementing value in your table
        tracking_column_type => "numeric"    
    }
    

    tracking_column 用于在更新表中的值时跟踪要映射的列。这应该为您解决问题。希望能帮助到你!

    【讨论】:

    • 天哪。我正在使用logstash 2.1.1 版,它不支持use_column_value、tracking_column、tracking_column_type。 2.1.1版本有没有其他办法解决这个问题?
    • 我已将 2.1.1 更新到 2.4.1。并添加了三行代码。 use_column_value => true tracking_column => "id" lowercase_column_names => false。它返回相同的值
    • 我不确定在没有 tracking_column_type => "numeric" 的情况下它是否可以工作,因为我只尝试过。在检查是否有任何解决方法后,我会回复你。
    • 我删除了一行并再次运行 curl -XDELETE 'localhost:9200*' 并再次运行 logstash。然后该行被删除。但是垃圾行仍然存在(我上个月删除了表和行)。它也没有自动更新。我应该重新安装 elasticsearch 吗?
    • 好吧,如果您要从上次停止的地方进行更改(例如拥有最后更新的 id),那么是的,您可能必须删除索引,因为更改将应用​​于新行,但如果您仍然从第一行本身读取它,那么您不必这样做。重新安装的意义?你的意思是重启服务?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多