SpringBoot集成ElasticSearch遇到的坑!!!

第一是为了记录采坑。
第二是为了“同道中人”,少走弯路!
一、注意你的ES版本,版本,版本【重要的事情说三遍!】
SpringBoot的ES依赖:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

记得没错此依赖只针对的是6.0版本以上ES,6.0版本以下ES不适用于SpringBoot的依赖。
举例:我们公司的线上ES版本为5.4.2,但是我刚开始集成的时候,使用了SpringBoot的依赖配置信息如下

spring:
    cluster-nodes: 公司ES的IP地址,注意端口号不是9200而是9300!!
    cluster-name: 这是你的ES的名称,打开ES页面后"cluster_name"参数的值
    elasticsearch:
      repositories:
        enabled: true

导致在启动后,报错无法找到ES,None of the configured nodes are available。哎,这个问题坑死!!!只要你仔细核对了cluster-nodes参数,cluster-name参数没有问题,那绝对是版本问题,你需要自己手动配置依赖!
公司的ES版本为5.4.2你的依赖就要是

		<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.4.2</version>
        </dependency>
        <!-- 尤其是要注意这里!下面的三个依赖,需要你打开ES页面,
        	查看lucene_version参数的版本,要一一对应!!!! -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>6.5.1</version>
        </dependency>
        <!-- https://mvnrepository.com/art... -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-highlighter</artifactId>
            <version>6.5.1</version>
        </dependency>
        <!-- https://mvnrepository.com/art... -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queries</artifactId>
            <version>6.5.1</version>
        </dependency>

另附一个图:
在这里插入图片描述
总结:个人建议还是自己老老实实配比较好,不要去用SpringBoot的ES依赖。。除非你的版本比较高吧。。。

-------------------------------分隔符------------------------------------

后面找到了一个兼容ES5、ES6的工具,叫Jest。具体如何使用可以看我另一篇文章:Java连接操作ElasticSearch工具类(含ES装了SQL插件的方式 支持5.0+6.0+)

-------------------------------分隔符------------------------------------

二、接着上面我说的自己配依赖的问题的坑!
确实自己配依赖是繁琐了点,但是在用SpringBoot的依赖,是越跑越远。。。。
自己配依赖也遇到了个坑。。。。
上面说的那4个自己配的依赖,copy到不同的项目中,版本号会自动变???!!!

在这里插入图片描述
在这里插入图片描述
怎么发现这个问题的呢,因为我自己手写了一个ES的配置类:

package com.es.util;

import java.net.InetAddress;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

public class EsClient {
    public final static String HOST = "127.0.0.1";

    public TransportClient client = null;

    public final static int PORT = 9300;

    /**
     * 获取客户端连接信息
     *
     * @return void
     * @Title: getConnect
     */
    @SuppressWarnings({"resource", "unchecked"})
    public void getConnect() {
        try {
            //如果使用集群名称不是默认的“elasticsearch”,则必须设置集群名称, 通过对Settings经行设置
            /*Settings settings = Settings.builder()
                    .put("cluster.name", "elasticsearch").build();*/
            /*TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(HOST), PORT));
            client.close();*/
            TransportClient client = null;
            PreBuiltTransportClient preBuiltTransportClient = null;
            // 设置集群名称
            Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
            // 创建client
            preBuiltTransportClient = new PreBuiltTransportClient(settings);
            client = preBuiltTransportClient
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), 9300));
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭连接
     *
     * @return void
     * @Title: closeConnect
     */
    public void closeConnect() {
        if (null != client) {
            client.close();
        }
    }

    public static void main(String[] args) {
        EsClient esClient = new EsClient();
        esClient.getConnect();
    }
}

在SpringBoot项目中,我复制过来Maven的Demo代码时,InetSocketTransportAddress类,爆红了。
百度了一番知道,在6.0以上版本中,InetSocketTransportAddress类被删除了,不在使用它创建链接了,而是使用TransportAddress类。
好的,知道了,但是为什么依赖一模一样,我的版本设置的是5.4.2。。。在SpringBoot中自动变成了6.0呢,一度有点觉得不可能,因为我是指定版本,并没有用starter。。但是百度也没有找到答案,所以我个人理解,可能是因为相同的依赖SpringBoot会识别到,他们那里有,就不去Maven仓库下载了。不这么想会一晚上睡不着。。所以有朋友知道为什么,也可以告我一下,谢谢

解决办法:将自己的ES依赖,先弄出来,再一键导入的SpringBoot项目中,也就说,我不写什么dependency了,我自己导入JAR,你管得着我吗??哈哈。。。。但是确实累!59个jar。。我去。。。

另附一个下载JAR的链接:
https://download.csdn.net/download/remember__peng/11633909
所有6.0以下版本的ES都可以使用,全部导入项目中,并把上面那个工具类复制下来即可。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值