Правильный синтаксис для document_id в выходных данных Logsta sh Elasticsearch - PullRequest
0 голосов
/ 28 мая 2020

Итак, я пытаюсь использовать logsta sh для перемещения данных из MongoDB в elasticsearch. Я не хочу, чтобы дубликаты записывались, поэтому я использую doc_as_upsert => true вместе с параметрами document_id в выводе. Это мой файл конфигурации для 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 => "db1.coll1.find({ },{'_id': false})"
  }
}

output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "test"
    user => ""
    password => ""
    doc_as_upsert => true
    document_id => "%{datetime}"
  }
}

Как видите, я пытаюсь использовать поле datetime документа MongoDB (которое является строкой) как идентификатор документа для elasticsearch. Но вот как выглядит документ, вставленный в Elasticsearch:

{
    "_index" : "test",
    "_type" : "_doc",
    "_id" : "%{datetime}",
    "_score" : 1.0,
    "_source" : {
        "@timestamp" : "2020-05-28T08:53:28.244Z",
        "document" : {
            # .. some fields ..
            "datetime" : "2020-05-28 14:22:29.133363",
            # .. some fields ..
        },
        "@version" : "1"
    }
}

Вместо значения поля datetime, используемого в качестве _id, в качестве идентификатора используется строка% {datetime}. Как это исправить?

1 Ответ

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

Поле document_id находится не на уровне root, поэтому вам нужно изменить синтаксис на:

document_id => "%{[document][datetime}}"
...