mongodb - 使用Logstash JDBC插件同步MongoDB和Elasticsearch时避免重复

标签 mongodb elasticsearch jdbc logstash mongo-jdbc-driver

我正在尝试使用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/

相关文章:

MongoDB 服务未启动。错误号 :13 Permission denied

elasticsearch - 如何在ElasticSearch中找到索引的别名

elasticsearch - 如何清除elasticsearch的cat-indices页面中的docs.deleted?

java - 如何解决异常java.sql.SQLException : No suitable driver found?

java - 通过java从mysql表中读取行

Java & MongoDB - 如何在 MongoDB 文档中获取 _id 的值?

javascript - JQuery 更改背景图像恢复为旧图像

mongodb - 如何在 MongoDB 图表中绘制统一的时间序列

Elasticsearch 不返回结果

java - 如何使用实体管理器和条件在 hibernate 中创建批量更新?