一、要点
1、RestHighLevelClient是官方出的也是推荐的高版本客户端,是首选
2、一个版本RestHighLevelClient客户端基本对应一个版本的elasticsearch
3、springboot有启动器spring-boot-starter-data-elasticsearch(spring-boot-starter-parent版本必须为2.2.0以上,低于不支持RestHighLevelClient),我们可以看到,集成的RestHighLevelClient为6.8.6,
并且无论如何改变版本,发现spring-boot-starter-data-elasticsearch支持的最低版本就为6.8.6。二、测试
1、环境
spring-boot-starter-data-elasticsearch(RestHighLevelClient为6.8.6) + elasticsearch 6.5.4
2、创建索引过程
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
@Configuration
public class Config {
@Bean
public RestHighLevelClient client() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("114.67.77.187:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
}
@Autowired
RestHighLevelClient client;
public void index() {
CreateIndexRequest request = new CreateIndexRequest("cat");//创建一个cat空索引
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
}
执行结果
Suppressed: org.elasticsearch.client.ResponseException: method [PUT], host [http://localhost:9200], URI [/cat?master_timeout=30sinclude_type_name=falsetimeout=30s], status line [HTTP/1.1 400 Bad Request]
{error:{root_cause:[{type:illegal_argument_exception,reason:request [/cat] contains unrecognized parameter: [include_type_name]}],type:illegal_argument_exception,reason:request [/cat] contains unrecognized parameter: [include_type_name]},status:400}
我们看到有个unrecognized parameter: [include_type_name],并且返回400;我们curl访问http://localhost:9200?cat=master_timeout=30s&include_type_name=false&timeout=30s
返现返回
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "request [/cat] contains unrecognized parameter: [include_type_name]"
}
],
"type": "illegal_argument_exception",
"reason": "request [/cat] contains unrecognized parameter: [include_type_name]"
},
"status": 400
}
很明显,include_type_name字段是多余字段; 那么include_type_name字段是干什么的呢?
反正是说,6.8版本以下不支持
include_type_name
,8.0和9.0可能也不支持
3、解决方案
a、升级elasticsearch版本为6.8
b、include_type_name是否可以通过配置取消掉?我们断点调试发现在
类中,找到了 好吧,写死的,很粗暴啊~,看来b方式不行了c、可以拉取匹配elasticsearch(服务端)的RestHighLevelClient版本(6.5.4)覆盖启动器spring-boot-starter-data-elasticsearch默认的RestHighLevelClient版本(6.8.6),pom.xml变更为
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.5.4</version>
</dependency>
我们看到
于是,添加索引成功!!!