Дублировать документ на эластичный поиск - PullRequest
1 голос
/ 13 апреля 2019

Мне нужно клонировать содержимое документа в моем индексе эластичного поиска (в том же индексе) с помощью консоли kibana. Мне нужны точно такие же поля в источнике _ документа (конечно, копия будет иметь другой идентификатор). Я пытался:

  1. ПОЛУЧИТЕ документ
  2. Создать новый пустой экземпляр документа
  3. Обновить новый документ вручную скопировать свойства результата в (1):
POST /blog/post/VAv2FWoBKgnBpki61WiD/_update {    "doc" : {
  "content" : "..." ...

Но проблема в том, что поля содержат очень длинные свойства. И иногда я получаю сообщение об ошибке, поскольку строки, кажется, не удаляются, когда я вручную копирую их из интерфейса Kibana.

Я искал в документации, но не могу найти запрос на дублирование документа, и я думаю, что это довольно распространенная мысль ...

Есть подсказка?

1 Ответ

0 голосов
/ 13 апреля 2019

Используйте Reindex API .Вот что вы можете сделать.

Сводка шагов:

  • Создать destination_index (пустышка).Убедитесь, что сопоставление точно с сопоставлением source_index
  • Использование Reindex 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"
  }
}

Обратите внимание, как я добавил script в приведенном выше запросе, который изменит _id (_id is set as 2) документа.Ваш целевой_индекс будет иметь все поля с точно такими же значениями, как у источника, за исключением поля _id.

Шаг 2. Скопируйте этот документ из конечного_индекса в исходный_индекс *

POST _reindex
{
  "source": {
    "index": "destination_index",
    "query": {
      "match": {
        "_id": "2"
      }
    }
  },
  "dest": {
    "index": "source_index"
  }
}

Теперь выполните поиск по source_index, в нем будет два документа с разными _ids (_id=1 and _id=2), имеющие одинаковое содержание.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...