Обновление кеша ElasticSearch
Я подключился к базе данных с помощью эластичного плагина jdbc river, и файл asticsearch успешно проиндексирован. Если я изменю значение существующего поля, оно будет отражено в индексе? Например, у меня есть столбец с именем disabled, и у него может быть "y" или "n", а в начале он имеет "y" и индексируется. Если я изменю его на 'n' позже, отразится ли это в индексе и кэше?
Я настроил реку как расписание на каждые 5 минут. Если это так, то как он обнаруживает обновление, а не новую прошивку?
1 ответ
Это зависит от запроса, который вы используете для извлечения из базы данных SQL. Если вы делаете общий выбор "select * from my_table", вы будете получать обновления каждые 5 минут, но эти обновления могут фактически создавать новые элементы в Elasticsearch. Создает ли оно новое или перезаписывает старое, зависит от того, что вы можете использовать в качестве идентификатора в вашем хранилище SQL как столбец "_id". Таким образом, чтобы всегда обновлять данные эластичного поиска, запрос должен выглядеть так: "выберите my_id_field как _id,* from my_table"
По сути, река не обнаруживает того, что было там раньше, а что сейчас. Он просто берет ваш запрос и помещает его в asticsearch (у него нет памяти), и он назначит поле _id, если вы его не предоставите.
Вы можете сделать это, создав таблицу es_track и просто выполняя инкрементные обновления (обычно основанные на времени). Недостатком является то, что для этого также могут потребоваться изменения схемы, так как вам нужно поле типа "updated_at" в таблице, из которой вы извлекаете данные.