使用最近的客户端 RestHighLevelClient 7.12.1 调用旧版本 ElasticSearch exp :6.8.8
Calling old version ElasticSearch exp :6.8.8 with a recent client RestHighLevelClient 7.12.1
从最近的 ES 客户端 exp spring boot 2.5.0
调用 elasticSearch 6.8.8 时出现此错误
Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
这是我的唯一索引文档:
@Document(indexName = "my_index")
public class MyDocument implements Serializable {
@Id
private String id;
private String name;
}
弹性配置:
@Configuration
@EnableElasticsearchRepositories
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Value("${elasticsearch.hosts}")
private String hosts;
@Value("${elasticsearch.connectionTimeOut:5000}")
private long connectionTimeOut;
@Value("${elasticsearch.socketTimeOut:5000}")
private long socketTimeOut;
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
if(hosts == null || hosts.isEmpty()) {
hosts = "localhost:9200";
}
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(hosts)
.withConnectTimeout(connectionTimeOut)
.withSocketTimeout(socketTimeOut)
.build();
return RestClients.create(clientConfiguration).rest();
}
}
错误:
Caused by: org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=mapper_parsing_exception, reason=Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:485)
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:396)
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:426)
at org.elasticsearch.ElasticsearchException.failureFromXContent(ElasticsearchException.java:592)
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:168)
使用新版本的 ES 我没有这个问题,但我的产品仍在使用 6.8.8
Elasticsearch 6.8.8 仍然有映射类型,但实际版本的客户端代码不再设置这些。并且 Spring Data Elasticsearch 不再添加 include_type_name
参数,该参数自 4.0 起已被弃用,现在已被删除。
您需要将 Elasticsearch 集群升级到 7.x 或降级到 Spring Data Elasticsearch 4.1.x(应该是 Spring Boot 2.4.x).针对 Elasticsearch 6.8.x 的最新版本 Spring Data Elasticsearch 是 3.3.
从最近的 ES 客户端 exp spring boot 2.5.0
调用 elasticSearch 6.8.8 时出现此错误Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
这是我的唯一索引文档:
@Document(indexName = "my_index")
public class MyDocument implements Serializable {
@Id
private String id;
private String name;
}
弹性配置:
@Configuration
@EnableElasticsearchRepositories
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
@Value("${elasticsearch.hosts}")
private String hosts;
@Value("${elasticsearch.connectionTimeOut:5000}")
private long connectionTimeOut;
@Value("${elasticsearch.socketTimeOut:5000}")
private long socketTimeOut;
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
if(hosts == null || hosts.isEmpty()) {
hosts = "localhost:9200";
}
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo(hosts)
.withConnectTimeout(connectionTimeOut)
.withSocketTimeout(socketTimeOut)
.build();
return RestClients.create(clientConfiguration).rest();
}
}
错误:
Caused by: org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=mapper_parsing_exception, reason=Root mapping definition has unsupported parameters: [_class : {index=false, type=keyword, doc_values=false}]]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:485)
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:396)
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:426)
at org.elasticsearch.ElasticsearchException.failureFromXContent(ElasticsearchException.java:592)
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:168)
使用新版本的 ES 我没有这个问题,但我的产品仍在使用 6.8.8
Elasticsearch 6.8.8 仍然有映射类型,但实际版本的客户端代码不再设置这些。并且 Spring Data Elasticsearch 不再添加 include_type_name
参数,该参数自 4.0 起已被弃用,现在已被删除。
您需要将 Elasticsearch 集群升级到 7.x 或降级到 Spring Data Elasticsearch 4.1.x(应该是 Spring Boot 2.4.x).针对 Elasticsearch 6.8.x 的最新版本 Spring Data Elasticsearch 是 3.3.