#java #spring-boot #elasticsearch #spring-data-elasticsearch
Вопрос:
Я получаю эту ошибку при вызове elasticSearch 6.8.8 из недавнего клиента ES exp spring boot 2.5.0
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;
}
ElasticConfig :
@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
Ответ №1:
В Elasticsearch 6.8.8 все еще были типы сопоставления, но клиентский код из фактической версии больше их не устанавливает. И Spring Data Elasticsearch больше не добавляет include_type_name
параметр, он устарел с версии 4.0 и теперь удален.
Вам необходимо либо обновить кластер Elasticsearch до 7.x, либо перейти на Spring Data Elasticsearch 4.1.x (это должна быть загрузка Spring 2.4.x). Последняя версия Spring Data Elasticsearch, предназначенная для Elasticsearch 6.8.x, была 3.3.