Удалите старые документы из эластичного поиска с помощью logstash

Я использую logstash для индексации данных из postgres (плагин ввода jdbc) в elasticsearch. У меня нет информации о времени в базе данных. Пользователи таблицы Postgres для импорта имеют 2 столбца - идентификатор пользователя (уникальный), без имени Экспорт эластичного поиска - _id = идентификатор пользователя Я экспортирую эти данные каждый час, используя расписание cron в logstash.

input {
     jdbc {
         schedule => "0 */1 * * *"
         statement => "SELECT userid, uname FROM users"
     }
}
output {
     elasticsearch {
        hosts => ["elastic_search_host"]
        index => "user_data"
        document_id => "%{userid}"
    }
}

Эта конфигурация logstash правильно индексирует данные. Но это работает только для обновлений и вставок. Если какие-либо данные / информация о пользователе будут удалены из таблицы, это не приведет к удалению документа из индекса эластичного поиска. Может кто-нибудь помочь мне с делом удаления?


person jsanjayce    schedule 24.10.2018    source источник


Ответы (1)


В logstash нет готовой опции для достижения желаемого результата.

https://discuss.elastic.co/t/delete-elasticsearch-document-with-logstash-jdbc-input/47490 - как упоминалось здесь, вы можете добавить столбец «статус» и пометить запись как удаленную вместо удаления записи.

Другой способ сделать это - удалять ваш индекс каждый час, а затем позволить logstash сделать это. Будет очень короткий промежуток времени, когда в Elasticsearch не будет данных.

Чтобы этого избежать, вместо этого вы можете настроить logstash для индексации нового индекса каждый час, например. user_data-timestamp, а затем удалите старые индексы извне с помощью куратора и т. д.

person ben5556    schedule 24.10.2018
comment
Спасибо за вашу помощь. Я ожидаю чего-то, что возможно напрямую с помощью logstash. В любом случае, я попробую ваше решение. - person jsanjayce; 26.10.2018
comment
К сожалению, на данном этапе это невозможно с помощью logstash. - person ben5556; 26.10.2018