You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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-nodescluster-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

火山引擎 最新活动