Как обновить данные в Elasticsearch по расписанию? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть таблица в базе данных PostgreSQL . Я хочу вставить данные из этой таблицы в индекс Elasticsearch . Мне нужно обновить данные индекса по расписанию. Другими словами, удаляет старые данные и вставляет новые. У меня есть такой Logstash файл конфигурации, но он не обновляет данные в индексе. Это вставка данных, но в то же время я вижу старые данные. Следовательно, дублирующиеся данные встречаются. Как правильно обновлять данные в Elasticsearch по расписанию?

input {
    jdbc {
        jdbc_connection_string => "jdbc:postgresql://host:port/postgres"
        jdbc_user => "postgres"
        jdbc_password => "postgres"
        jdbc_driver_library => "postgresql-42.2.9.jar"
        jdbc_driver_class => "org.postgresql.Driver"
        statement => "SELECT * FROM layers;"
        schedule => "0 0 * * MON"
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "layers"
    }
}

1 Ответ

1 голос
/ 11 декабря 2019

Ваше имя индекса не изменяется, поэтому каждый раз, когда вы добавляете новые записи, оно добавляет к тому же индексу.

Добавьте постфикс даты и времени к индексу

index => "layers%{+YYYY.MM.dd}"

Так что будетновый индекс для каждой даты.

Теперь для поиска создайте псевдоним, чтобы вы всегда могли использовать одно и то же имя в своем приложении. Например: layers/_search, добавив псевдоним, как показано ниже:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "layers-2019.12.11",
        "alias": "layers"
      }
    }
  ]
}

Выше описан шаг через кибану или вы можете использовать http post. Тем не менее, я бы рекомендовал использовать Куратор для операций с псевдонимами . Таким образом, как только команда log stash завершится, вы можете запустить куратор, чтобы удалить текущий индекс из псевдонима и добавить вновь созданный.

...