在springboot项目启动的时候会出现Elasticsearch仓库自动创建索引报错的的问题:
2020-12-04 09:09:28.408 WARN 25592 --- [ restartedMain] .d.e.r.s.AbstractElasticsearchRepository : Cannot create index: Elasticsearch exception [type=resource_already_exists_exception, reason=index [movie/NZ4EAyAERke10mOCVPhvrA] already exists]; nested exception is [movie/NZ4EAyAERke10mOCVPhvrA]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
springboot版本: 2.3.0.RELEASE
此版本下的spring-data-elasticsearch模块版本为:4.0.0.RELEASE
spring-data-elasticsearch模块用到的elasticsearch版本:7.6.2
我在spring-data-elasticsearch项目的issue下搜到了解决方案。(仓库不应该尝试去创建一个索引当它存在时)
-
在 Fix Version/s:4.0.1 (Neumann SR1), 4.1 M1 (2020.0.0) 可以看到4.0.1版本已经解决了这个问题。
4.0.1版本解决的代码提交https://github.com/spring-projects/spring-data-elasticsearch/pull/456/commits/08eef2d9e344b3ada9300d89553fc2c356a0804d
看到仓库在创建索引的时候去判断了索引存不存在也就是添加了这句代码: !indexOperations.exists()。
所以解决这个报错的方法就是升级你的项目版本。我是直接springboot项目从2.3.0升级到2.3.1。2.3.1版本下的spring-data-elasticsearch就是4.0.1版本了。当然了你也可以直接升级spring-data-elasticsearch的版本直4.0.1及以上。