Обновить запись эластичного кэша без полной его замены
Я использую это, чтобы добавить кучу записей в индекс эластичного кэша:
def self.index_trends(trend_hashes)
formatted_trends = trend_hashes.map do |trend_hash|
{
index: {
_index: 'trends',
_type: 'trend',
_id: trend_hash["id"],
data: trend_hash
}
}
end
elasticsearch.bulk({
body: formatted_trends
})
end
Теперь мне нужно обновить запись (учитывая ее идентификатор). Я хочу просто добавить один ключ-val к data
хэш, а не заменить все состояние. Как я могу сделать это с помощью elasticsearch-ruby
?
1 ответ
Решение
Я не знаю, как это сделать с ruby, но в ES есть обновление API.
Который выглядит так
POST test/type1/1/_update
{
"script" : "ctx._source.new_field = \"value_of_new_field\""
}
Из примера с ruby должно быть
client.update index: 'myindex', type: 'mytype', id: '1',
body: { script: 'ctx._source.tags += tag', params: { tag: 'x' } }