Elasticsearch: установить тип поля при переиндексации? (можно ли это сделать только с помощью _reindex)

Вопрос: Можно ли использовать Elasticsearch _reindex API для установки/сброса "типов данных полей" полей, которые копируются через него?

Этот вопрос возник при просмотре документов Elastics для переиндексации: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-reindex.html

Эти документы показывают, что _reindex API может изменять объекты во время их копирования. Они приводят пример изменения имени поля:

POST _reindex
{
  "source": {
    "index": "from-index"
  },
  "dest": {
    "index":"new-index"
  },
  "script": {
    "source": "ctx._source.New-field-name = ctx._source.remove(\"field-to-change-name-of\")"
  }
}

Предложение script приведет к тому, что «новый индекс» будет иметь поле с именем New-field-name вместо поля с именем field-to-change-name-of из «от-индекса».

Документация подразумевает, что в функциональности «сценария» имеется большая гибкость, но мне не ясно, включает ли это проецирование типов данных (например, цитирование данных для преобразования их в строки/текст/ключевые слова и/или обработка вещей как литералы, чтобы попытаться превратить строковые данные в нестроки (очевидно, боролись с опасностью)

Если установка типов данных в _reindex возможна, я не предполагаю, что это будет эффективно и/или не будет (возможно, жестких) ограничений - я просто хочу лучше понять предел функциональности _reindex (и выясните, могу ли я принудительно указать тип данных всего за одно взаимодействие, вместо того, чтобы устанавливать сопоставление без нового индекса, прежде чем я выполню команду переиндексации)

(P.S. Я работаю над Elasticsearch 6.2, но думаю, что мой вопрос актуален для всех версий с _reindex API (похоже, все 2.3.0 и выше))


person Mike Lutz    schedule 13.03.2018    source источник


Ответы (1)


Возможно, вы путаете некоторые термины. Часть документации, на которую вы указываете, относится к метаданным, связанным с документом, в этом случае метаполе _type просто сообщает Elasticsearch, что конкретный документ принадлежит к определенному типу (например, user типу), он не связан с типом данных поля (например, integer или boolean).

Если вы хотите установить/сбросить сопоставление определенных полей, вам даже не нужно использовать сценарии в зависимости от вашего случая. Вам просто нужно создать целевой индекс с новым сопоставлением и выполнить _reindex API.

Но если вы хотите изменить сопоставление между несовместимыми значениями (например, нечисловой строкой в ​​поле с «целочисленным» типом данных), вам потребуется выполнить некоторое преобразование с помощью сценария или с помощью загрузить узел.

person Antonio Val    schedule 13.03.2018
comment
Спасибо за ответ! - Моя цель - узнать, есть ли способ установить тип данных поля/параметров в одном вызове _reindex. Спасибо, что заметили, что можно предварительно создать новый индекс с сопоставлением, но я пытаюсь избежать этой работы - я обновил свой вопрос, чтобы сделать все это немного более понятным. - person Mike Lutz; 13.03.2018
comment
Я не уверен, понял ли я, что вы имеете в виду, но вы хотите установить сопоставления нового индекса в том же вызове, используя _reindex API? Я думаю, что это было бы возможно только с помощью динамического отображения. Возможно, знание вашего варианта использования поможет, какую задачу вы пытаетесь выполнить. - person Antonio Val; 14.03.2018
comment
В чем именно разница между _type и типом данных поля? - person Mustafa Qamaruddin; 30.06.2021