2015-11-12 4 views
2

Моей работа:elasticsearch 2,0 родителя ребенок внук

родитель: страна, ребенок: филиал, внучата: сотрудник

PUT/фирма { "Отображение": { "ветвь": { «_parent «: { "типа": "страна" } }, "сотрудник": { "_parent": { "типа": "филиал" } }}}

Я хочу добавить внучат employee2, родитель является филиалом:

PUT/компания/employee2/_mapping { "employee2": { "_parent": { "типа": "филиал" }}}

Я получаю неправильное сообщение:

{ "ошибка": { "ROOT_CAUSE": [ { "типа": "illegal_argument_exception", "причина": "не может добавить поле _parent, что указывает на уже существующий тип" } ], "типа": "illegal_argument_exception", "причина" : «не может добавить поле _parent, указывающее на уже существующий тип»}, «статус»: 400}

Я не знаю, как я могу это сделать. Есть какое-нибудь предложение? Благодарю.

ответ

8

Это ограничение, введенное в elasticsearch 2.0. Это указано в breaking changes in 2.0. Однако причина этого в документе не ясна.

Ниже, что martijnvg разработчика elasticsearch размещен на elasticsearch обсуждения темы:

новый тип ребенок не может указывать на существующий тип в качестве родителя.

Это связано с тем, что с новым родителем/дочерним элементом реализация как родительского, так и дочернего типов хранит идентификаторы в поле объединения. Если тип становится родителем после его создания, то могут быть проиндексированы родительские документы, которые не сохраняли их идентификатор в поле объединения . По этой причине это ограничение существует.

Это относится только к новым показателям, созданным после обновления до ES 2.0. Для целей миграции это ограничение не применяется для индексов , созданных до обновления до ES 2.0. Фактически, при создании на ES 1.x и перед использованием старой реализации parent/child.

Вы можете прочитать об этом здесь: https://discuss.elastic.co/t/adding-child-types-in-2-0/33267

Смежные вопросы