Подтвердить что ты не робот

Ошибка при создании отображения для индекса

Я пытаюсь изменить отображение индекса, но получаю сообщение об ошибке. Вот шаги, которые я предпринимаю для создания индекса

  • создайте индекс, заполнив его через 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
}

Любые идеи?

4b9b3361

Ответ 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