【问题标题】:ElasticSearch 7 not taking _id from JDBC on LogstashElasticSearch 7 没有从 Logstash 上的 JDBC 获取 _id
【发布时间】:2019-10-18 14:20:36
【问题描述】:

我正在尝试使用存储在 SQL 数据库中的数据来更新 ElasticSearch 索引,这样添加到数据库中的每一行都会自动添加到 ElasticSearch 中。

我尝试将数据库的主键设置为 ElasticSearch 的 _id 字段,这样每次计划启动 Logstash(每分钟一次)时,已经在 ElasticSearch 中的文档不会被重新添加。

这是我的 Logstash .conf 文件:

input {
    jdbc {
        jdbc_connection_string => "JDBC-Connection-String"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_user => "JDBC-Connection-User"
        jdbc_driver_library => "JDBC-Driver-Path"
        statement => "SELECT MyCol1 MyCol2 FROM MyTable"
        use_column_value => true
        tracking_column => "MyCol1"
        tracking_column_type => "numeric"
        clean_run => true
        schedule => "*/1 * * * *"
    }
}
output {
    elasticsearch {
    hosts => "http://localhost:9200"
    index => "MyIndex"
    document_id => "%{MyCol1}"
}

    stdout { }
}

Logstash 完成后,我在 ElasticSearch 中只找到了 1 个带有 "_id": "%{MyCol1}" 的文档,为什么 Logstash 不能正确获取 id 值? 附: MyCol1 是 Mytable 的主键

【问题讨论】:

    标签: elasticsearch jdbc logstash logstash-jdbc


    【解决方案1】:

    有几件事要记住。

    1. document_id 中的值必须是查询的一部分。
    2. ID 区分大小写。所以请使用确切的名称..
    3. clean_run=>假
    4. 使用 :sql_last_value 来标识您要注意标识新记录的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多