使用ElasticSearch存储数据时遇ignore_throttled参数非法异常求助
解决Spring Data Elasticsearch调用
repository.save()时的ignore_throttled参数异常 哥们,这个异常的核心问题是Spring Data Elasticsearch版本和你Docker里运行的Elasticsearch版本不匹配。ignore_throttled这个参数是Elasticsearch 7.7版本之后才引入的,如果你的ES版本低于7.7,但用了过高版本的Spring Data Elasticsearch,就会出现这个“参数不被识别”的错误。
下面是具体的排查和解决步骤:
1. 先确认版本对应关系
Spring Data Elasticsearch和Elasticsearch有严格的版本绑定,不能随便乱搭:
- Spring Data Elasticsearch 4.x 对应 Elasticsearch 7.x
- Spring Data Elasticsearch 3.x 对应 Elasticsearch 6.x
- Spring Data Elasticsearch 2.x 对应 Elasticsearch 5.x
你可以先通过curl localhost:9200查看Docker里运行的ES版本,再对照调整Spring Data的版本。
2. 选一种方案调整版本
方案A:升级Docker里的Elasticsearch
如果项目允许,直接把ES升级到7.7或更高的稳定版本(比如7.17 LTS版本),Docker命令改成:
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.0
方案B:降级Spring Data Elasticsearch版本
如果不想升级ES,就把Spring Data的版本降到和你的ES匹配的版本。比如你的ES是6.8.x,就在依赖里调整:
Maven项目(pom.xml):
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-elasticsearch</artifactId> <version>3.2.12.RELEASE</version> <!-- 对应ES 6.8.x --> </dependency>
Gradle项目(build.gradle):
implementation 'org.springframework.data:spring-data-elasticsearch:3.2.12.RELEASE'
3. 清理冗余配置
你的配置里有一些冲突和冗余的地方,建议调整:
- 删掉
application.yml里的spring.data.elasticsearch.cluster-nodes和cluster-name,因为你用的是RestHighLevelClient(REST模式),这些是旧的TCP集群配置,没用还可能冲突。 FileProperty.java里的type = "user"在ES 7.x及以上已经被废弃了,直接去掉这个属性,改成:
@Document(indexName = "index", shards = 2)
4. 验证修复
改完之后重启项目,再调用repository.save(new FileProperty("12dW", 123.123, "hii")),应该就能正常存数据了。
内容的提问来源于stack exchange,提问作者Catalina




