Добавьте _id в источник как отдельное поле для всех существующих документов в индексе

#elasticsearch #elasticsearch-opendistro

#elasticsearch #elasticsearch-opendistro

Вопрос:

Я новичок в эластичном поиске. Мне нужно просмотреть все документы, взять _id и добавить их в _source качестве отдельного поля с помощью скрипта. Возможно ли это? Если да, могу ли я привести пример чего-то подобного или ссылку на похожие скрипты? Я не видел ничего подобного в доках. Зачем мне это нужно? — Потому что после этого я буду делать SELECT с помощью Opendistro и SQL. Этот фрейм не может вернуть мне поля, которых нет в источнике. Если кто-нибудь может предложить, я был бы очень благодарен.

Ответ №1:

Есть два варианта:

Первый вариант: добавьте это новое поле в существующий индекс, заполните его и снова создайте новый индекс.

Второй вариант: просто определите новое поле в новом сопоставлении индексов (оставьте все остальные поля одинаковыми), а затем используйте API переиндексации с помощью приведенного ниже скрипта.

  "script": {
        "source": "ctx._source.<your-field-name> = ctx._id"
    }
 

Комментарии:

1. POST index/_doc/_update_by_query { "query": { "match_all": {} }, "script": { "source": "ctx._source.docId = ctx._id" } } Именно то, что мне нужно, спасибо!