我正在尝试使用Logstash使MongoDB集合与Elasticsearch索引保持同步。
为此,我将Logstash JDBC插件与DBSchema JDBC驱动程序库一起使用。
这是我用于Logstash的配置文件:-
input {
jdbc{
jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
jdbc_driver_library => "/path/to/mongojdbc1.8.jar"
jdbc_user => ""
jdbc_password => ""
jdbc_connection_string => "jdbc:mongodb://127.0.0.1:27017/db1"
statement => "db.collection1.find({ }, { '_id': false })"
}
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "testing"
user => ""
password => ""
}
}
一切正常,但是当我多次运行logstash时,记录会多次插入Elasticsearch。我不希望记录被重写。另外,如果我修改文档并再次运行logstash,它应该在Elasticsearch中更改同一记录,而无需创建新文档。我该如何实现这一目标?
最佳答案
您可以按ID同步文档。
这是Logstash Elasticsearch output plugin的链接,部分包含您需要的选项。
因此,对于文档,您必须将doc_as_upsert
设置为true,并在输出中传递document_id。
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "testing"
user => ""
password => "",
doc_as_upsert => true,
document_id => "%{id}"
}
}
请注意
document_id => "%{id}"
-ID是您的文档ID字段名称。
关于mongodb - 使用Logstash JDBC插件同步MongoDB和Elasticsearch时避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62042801/