#elasticsearch #kibana
#elasticsearch #kibana
Вопрос:
Мне нужно клонировать содержимое документа в моем индексе elasticsearch (в том же индексе) с помощью консоли kibana. Мне нужны точно такие же поля в _source документа (конечно, копия будет иметь другой идентификатор). Я попытался:
- ПОЛУЧИТЬ документ
- Создайте новый пустой экземпляр document
- Обновите новый документ, вручную скопировав свойства результата в (1):
POST /blog/post/VAv2FWoBKgnBpki61WiD/_update { "doc" : { "content" : "..." ...
Но проблема в том, что поле содержит очень длинные свойства. И иногда я получал сообщение об ошибке, поскольку строки, похоже, не обрабатываются, когда я вручную копирую их из интерфейса Kibana.
Я искал в документации, но не могу найти запрос для дублирования документа, и я думаю, что это довольно распространенная идея…
Есть какие-нибудь подсказки?
Ответ №1:
Используйте API переиндексации. Вот что вы можете сделать.
Краткое описание шагов:
- Создайте
destination_index
(фиктивный). Убедитесь, что отображение точно соответствует отображениюsource_index
- Используя API переиндексации, переиндексируйте этот конкретный документ из
source_index
вdesitnation_index
. Во время этой операции обновите _id (я упомянул сценарий) - Переиндексируйте этот документ обратно из
desitnation_index
вsource_index
Запрос переиндексации
Шаг 1. Скопируйте документ из source_index в destination_index. (С помощью скрипта)
POST _reindex
{
"source": {
"index": "source_index",
"query": {
"match": {
"_id": "1"
}
}
},
"dest": {
"index": "destination_index"
},
"script": {
"inline": "ctx._id=2",
"lang": "painless"
}
}
Обратите внимание, как я добавил a script
в приведенный выше запрос, который изменил _id (_id is set as 2)
бы документ. В вашем destination_index будут все поля с точно такими же значениями, что и у источника, за исключением _id
поля.
Шаг 2. Скопируйте этот документ из destination_index в source_index
POST _reindex
{
"source": {
"index": "destination_index",
"query": {
"match": {
"_id": "2"
}
}
},
"dest": {
"index": "source_index"
}
}
Теперь выполните поиск source_index
, у него будет два разных документа с _ids (_id=1 and _id=2)
одинаковым содержимым.
Надеюсь, это поможет!
Комментарии:
1. Большое спасибо! Конечно, это помогает. Я также нашел другую альтернативу, используя скрипт logstash 🙂