Ошибка при создании отображения для индекса
Я пытаюсь изменить отображение индекса, но получаю сообщение об ошибке. Вот шаги, которые я предпринимаю для создания индекса
- создайте индекс, заполнив его через python script
-
установите отображение с помощью этого кода:
PUT /myidx/orderrow/_mapping
{
"orderrow": {
"properties": {
"item_code": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
Здесь появляется сообщение об ошибке:
{
"error": "MergeMappingException[Merge failed with failures {[mapper [item_code] has different index values, mapper [item_code] has different `norms.enabled` values, mapper [item_code] has different tokenize values, mapper [item_code] has different index_analyzer]}]",
"status": 400
}
Любые идеи?
Ответы
Ответ 1
Поскольку вы индексируете данные сначала в индекс, Elasticsearch автоматически определяет тип поля/сопоставление для вашего поля item_code
на основе загружаемых данных. Затем, когда вы пытаетесь обновить отображение, вы получаете ошибку, показанную выше.
Я бы рекомендовал создать индекс и применить сопоставление до запуска Python script для заполнения индекса.
PUT /myproj/
PUT /myproj/orderrow/_mapping
{
"orderrow": {
"properties": {
"item_code": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
В качестве альтернативы вы можете принудительно ввести конфликтующее сопоставление в свой индекс, используя опцию ignore_conflicts
, как определено в разделе слияния и конфликтов в документации по API сопоставления Put. Однако я не уверен, как это повлияет на уже проиндексированные документы.
Ответ 2
У меня была такая же проблема, и я решил удалить ее и создать ее (предупреждение: удаление сопоставления удаляет все документы (строки) с этим сопоставлением)
DELETE /myidx/orderrow/_mapping
PUT /myidx/orderrow/_mapping -d '
...
'
После этого мне пришлось закрыть и открыть индекс:
POST /myidx/_close
POST /myidx/_open