springboot2.1*集成远程elasticsearch服务(阿里云租的)详细教程

小弟最近在捣腾公司项目中的搜索业务,考虑到业界成熟的方案,选择了阿里云的elasticsearch服务(当然也可以下载开源的:),elasticsearch下面简称es服务,废话不多说,进入主题。 如果你按照网上千篇一律的教程,springboot集成es启动时出现错误,常见的有:

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available

还有:

elasticsearch.xxx.jar版本内的jar包缺失等,

上述问题的根源基本都是springboot版本和es的版本不一致导致的;本文重点介绍高版本的集成;

使用工具类RestHighLevelClient连接远程es的服务,因为目前为止spring-data-elasticsearch还不支持es6.0+以上的版本;所以只能使用官方维护的工具类连接;远程的es服务访问是需要用户名密码的,而很巧的是本地下载运行的es是不需要的,直接运行localhost:9200就能看到信息,网上很多教程都是根据这个写的,连接远程es服务的教程我发现的不多;下面上代码:

pom.xml依赖包

es 创建连接用户_es 创建连接用户


启动的配置bean:

/**
 * 主机
 */
@Value("${elasticsearch.host}")
private String esHost;

/**
 * 传输层端口,注意和ES的Restful API默认9200端口有区分
 */
@Value("${elasticsearch.port}")
private int esPort;

/**
 * 集群名称
 */
@Value("${elasticsearch.clustername}")
private String esClusterName;

/**
 * 用户名
 */
@Value("${elasticsearch.username}")
private String userName;
@Value("${elasticsearch.password}")
private String password;


@Bean
public RestHighLevelClient client() {
    log.info("开始初始化Elasticsearch");
    try {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(userName, password));

        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost(esHost, esPort))
                        .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                            @Override
                            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                                return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                            }
                        })
        );
        return client;
    } catch (Exception ex) {
        log.error("es初始化出错....");
        ex.printStackTrace();
    }
    return null;
}

配置文件(下面修改为你的地址):
elasticsearch.host=es-xxx.aliyuncs.com elasticsearch.port=9200
elasticsearch.clustername=es-xxx(这个名称不知道的同学,直接浏览器访问es-xxx.aliyuncs.com:9200可以看到)
elasticsearch.username=elastic
elasticsearch.password=xxxx

OK就是这么简单,下面看看启动效果:无报错

es 创建连接用户_RestHighLevelClient_02


这里我们新建一个索引验证连接是否有效:

浏览器访问接口(当然前提是接口写好哈):localhost:9998/test/createIndex/wangxq_2:

es 创建连接用户_es 创建连接用户_03


然后浏览器查询已建好的索引:http://xxxxxxxxxxxxxxxxx:9200/_cat/indices?v,即可以看到刚刚新建的索引已经加上去;证明我们这个连接远程es的方式是没有问题的。 如果有写的不对的地方,欢迎指正,我确实是使用了很多种方式连接(transport(准备被抛弃了),jest,spring-data-elasticsearch),走了不少弯路才总结出来这套方法,希望可以帮到需要的同学。下面可能出一篇es增删改查java的接口,下面附上一个es官方的文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-delete-index.html