SpringBoot整合Elasticsearch
Elasticsearch的Java客户端有好几个。具体可以看
这篇博客:
Elasticsearch的Java客户端
先说整合流程,注意,我这里使用的es是6.1.4版本SpringBoot是2.1.4.RELEASE 版本不一致可能导致出错!!!。 这里是个大坑
这里我采用的是启动器整合
1 添加启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2 添加配置文件
spring:
data:
elasticsearch:
cluster-name: lixue
cluster-nodes: 节点的ip地址:9300
repositories:
enabled: true
3 创建接口继承ElasticsearchRepository
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
import xyh.lixue.entity.Problem;
@Component
public interface ProblemRepository extends ElasticsearchRepository<Problem,String> {
}
4 实体类
@Data
@Document(indexName = "lixue",type = "problem")
public class Problem implements Serializable {
//题目id
@Id
private String problemId;
//知识点
private String knowledgePoint;
//题目标题
private String title;
private String publish;
//题目图片名字
private String problemPictureName;
//答案图片名字
private String answerPictureName;
//热度
private int hotPoint;
}
5 运行
先运行看报错不,我第一次报了下面这个错误。
failed to load elasticsearch nodes
org.elasticsearch.client.transport.NoNodeAvailableException:
None of the configured nodes are available:
这个错误信息的意思就是说根据你的配置无法连接这个节点。
可能的原因有一下:
-
端口不对,注意是9300端口,9200端口是http的端口。这里使用的tcp连接。
-
ip地址有问题,这个也好排查,直接curl 你的地址:9200看是否返回成功的json
-
yml中cluster-name名字与config/elasticsearch.yml中的不一样。
以上三个问题都排查了还是无法解决问题的话,那么恭喜你。很有可能就是版本冲突的问题了。
网上说SpringBoot2.X的spring-boot-starter-data-elasticsearch仅支持es2.X的版本。 最好还是不用随便相信。自己去探索真理不就好了
-
我们先来看一下这个启动器里面有哪些东西
发现没有,里面就是用了spring-data-elasticsearch3.1.6
-
那么我们去github上面看看github:spring-data-elasticsearch
spring data elasticsearch | elasticsearch |
---|---|
3.2.x | 6.5.0 |
3.1.x | 6.2.2 |
3.0.x | 5.5.0 |
2.1.x | 2.4.0 |
2.0.x | 2.2.0 |
1.3.x | 1.5.2 |
-
spring-data-elasticsearch3.1.6支持到6.2.2。如果你的启动器不适配你安装的elasticsearch版本的话有三种思路
-
1 更换elasticsearch版本
-
2 更改SpringBoot的版本
-
3 改用spring-data-elasticsearch(推荐)
-
使用spring-data-elasticsearch
根据github的提示,添加依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
这里光添加这一个包还是报错,还需要添加两个包。
<!-- elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.12</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>5.6.12</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
如果还是报错的话,就调一调前面两个依赖的版本。