基于springboot的RestHighLevelClient管理elasticsearch注意点

5,518 阅读2分钟

一、要点

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字段是干什么的呢?

请查看:segmentfault.com/a/119000001…

反正是说,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>

我们看到

于是,添加索引成功!!!