Elasticsearch выдает ошибку при запуске

Я реализовал Elasticsearch в весенней загрузке. При каждом перезапуске сервера я получаю следующую ошибку.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productController': Unsatisfied dependency expressed through field 'ps'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'productServiceImpl': Unsatisfied dependency expressed through field 'pr'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository': Invocation of init method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Rejecting mapping update to [products] as the final mapping would have more than 1 type: [_doc, product]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]

Я удалял индекс каждый раз, чтобы запустить сервер, а затем выполнить индекс. Может ли кто-нибудь предложить мне, что будет решением


person sree    schedule 23.05.2020    source источник
comment
вы используете Spring Data Elasticsearch? Или просто Elasticsearch и создавать свои собственные запросы? Какую версию Spring Boot и Spring Data Elasticsearch вы используете?   -  person P.J.Meisch    schedule 23.05.2020
comment
@sree, вы давно не голосовали за мой ответ, было бы здорово, если бы вы могли проголосовать за ответ, если ваша проблема решена   -  person user156327    schedule 04.08.2020
comment
Я проголосовал за одинокого назад   -  person sree    schedule 04.08.2020


Ответы (2)


Elasticsearch v6 и выше не может иметь более одного типа для индекса. Но из вашего исключения ваше сопоставление пытается создать более одного типа в индексе (_doc и продукт)

См. https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html для получения дополнительной информации.

person Karthick Vinod    schedule 23.05.2020

Как уже упоминалось @Karthick из Elasticsearch 6.X, более одного типа для каждого индекса устарели, и только _doc внутренний и тип сопоставления по умолчанию поддерживается до версии 7 (в целях обратной совместимости), и это тоже будет полностью удалено из скорого выпуска 8. X основная версия.

Чтобы решить эту проблему, вам нужно удалить собственное имя типа product.

Как указано в официальной ссылке, почему удалено.

В индексе Elasticsearch поля с одинаковыми именами в разных типах сопоставления поддерживаются одним и тем же полем Lucene внутри. Другими словами, используя приведенный выше пример, поле user_name в пользовательском типе хранится точно в том же поле, что и поле user_name в типе tweet, и оба поля user_name должны иметь одинаковое сопоставление (определение) в обоих типах.

Это может привести к разочарованию, когда, например, вы хотите удалить поле даты в одном типе и логическое поле в другом типе в том же индексе.

Вдобавок ко всему, хранение разных сущностей с небольшим количеством общих полей или вообще без них в одном и том же индексе приводит к разреженным данным и препятствует способности Lucene эффективно сжимать документы.

По этим причинам мы решили удалить концепцию сопоставления типов из Elasticsearch.

person user156327    schedule 23.05.2020