Избегайте дублирования при синхронизации MongoDB и Elasticsearch с плагином Logsta sh JDB C - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь синхронизировать коллекцию MongoDB c с индексом Elasticsearch, используя Logsta sh.

Я использую плагин Logsta sh JDB C с DBSchema JDB C Библиотеку драйверов для этого.

Это файл конфигурации. Я использую для logsta sh: -

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 => ""
  }
}

Это работает нормально, но когда я запускаю logsta sh несколько раз, записи несколько раз вставляются в Elasticsearch. Я не хочу, чтобы записи переписывались. Кроме того, если я изменяю документ и снова запускаю logsta sh, он должен изменить ту же запись в Elasticsearch без создания нового документа. Как мне go достичь этого?

1 Ответ

2 голосов
/ 27 мая 2020

Вы можете синхронизировать c документы по идентификаторам. Вот ссылка на Logsta sh Плагин вывода Elasticsearch , частично с необходимыми вам параметрами.

Итак, что касается документов, вы должны установить 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 вот вы делаете c имя поля id.

...