最近在项目中集成Es时使用spring-data-elasticsearch
来操作es
执行下面这段代码:
EsUserFile esUserFile = new EsUserFile();
esUserFile.setFileId(1895139699723743232L);
esUserFile.setUserId(1877941435017703424L);
esUserFile.setParentId(1895133507681136640L);
esUserFile.setFilename("测试4");
esUserFile.setFileSizeDesc("--");
esUserFile.setDelFlag(0);
esUserFile.setFolderFlag(1);
esUserFile.setFileType(0);
esUserFile.setUpdateTime(new Date());
restTemplate.save(esUserFile,IndexCoordinates.of("nebula_user_file"));
出现了下面的异常:
按道理来说这个问题是很容易解决的,因为出现这个错误一般就是spring-data-elasticsearch
版本与spring boot版本不一致导致的,但是经过排查我的版本依赖是绝对没有问题的。我使用的是 spring boot 2.7.5,然后spring-data-elasticsearch
是4.3.10。我甚至切换了很多个版本进行尝试,但是最终都会出现这个异常,这让我掉了不少头发,最终发现问题出在父 pom 文件中。
在我的父pom文件中定义了一个elasticsearch的版本号,但是这里只是定义了版本号并没有引入对应的依赖坐标,但是居然就是这个原因导致的问题,很不可思意。
然后点开spring-data-elasticsearch
发现elasticsearch的版本本来应该是7.15.2才是正确的,但是现在居然是7.12.1,看来是由于我们在父pom中定义的elasticsearch.version覆盖了这个版本。
最后将父pom中的这个熟悉删除就能解决这个异常问题了。
INDEX_CONTENT_TYPE问题常见解决方案
在使用spring-data-elasticsearch时出现这个问题不要慌,这个问题出现一定是说明spring-data-elasticsearch版本和springboot版本不兼容导致的,多尝试更换几个版本就能解决,我使用springboot2.7.5,spring-data-elasticsearch4.3.x的版本都能兼容,上了4.4.x就不能兼容了,对了我使用的es版本是7.17.9