我正在尝试使用存储到 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 的主键
有几件事需要记住。
我在 MS SQL 和 Logstash 上也遇到了类似的问题。对我来说,在数据库中我有“Id”并且我使用的是 document_id=>{%Id}。这不起作用,但 {%[id]} 起作用了。我还必须将其设置为小写,尽管在数据库中我有“Id”。