Elasticsearch-SpringBoot整合Elasticsearch

本文介绍SpringBoot整合Elasticsearch的流程,包括添加启动器、配置文件,创建接口继承ElasticsearchRepository等。还提及Elasticsearch安装配置、MySQL数据导入、IK分词器搜索等内容。同时指出整合中可能出现的连接问题及版本冲突问题,并给出解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot整合Elasticsearch

Elasticsearch-安装与配置

MySQL数据导入到Elasticsearch

使用IK分词器实现搜索

限制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 elasticsearchelasticsearch
3.2.x6.5.0
3.1.x6.2.2
3.0.x5.5.0
2.1.x2.4.0
2.0.x2.2.0
1.3.x1.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>

如果还是报错的话,就调一调前面两个依赖的版本。

### Spring Boot 整合 Elasticsearch JDBC 示例教程 #### 配置依赖项 为了使 Spring Boot 项目能够与 Elasticsearch 进行交互,需要引入相应的 Maven 或 Gradle 依赖。通常情况下会使用 `spring-boot-starter-data-elasticsearch` 来简化这一过程[^2]。 对于想要利用 JDBC 功能的情况,则还需要额外加入 `elasticsearch-jdbc` 的驱动程序作为依赖: ```xml <dependency> <groupId>org.xbib.tools</groupId> <artifactId>jdbc-elasticsearch-sql</artifactId> <version>7.10.0</version> </dependency> ``` #### 数据库表结构设计 假设有一个名为 `employee` 的表格存储员工信息,在 MySQL 中创建该表之后,可以将其映射至 Elasticsearch 索引内以便后续查询操作更加高效快捷[^3]。 #### 编写实体类 定义 Java 类表示上述提到的数据模型,并标注适当注解使其成为 JPA 实体对象;同时也可以考虑为字段添加索引属性以优化检索性能。 ```java @Entity @Table(name="employees") @Document(indexName = "emp", type="_doc") public class Employee { @Id private Long id; private String firstName; private String lastName; private Integer age; // getters and setters omitted... } ``` #### 自动化迁移脚本编写 借助 Logstash 插件或者其他 ETL 工具完成从关系型数据库向 NoSQL 存储引擎之间的转换工作,确保每次更新都能及时反映到目标位置上[^4]。 #### 使用 RESTful API 发送请求 当一切准备就绪后就可以尝试发送 HTTP 请求给 Elasticsearch 节点来进行测试验证了。这里给出一段简单的命令用于获取销售部门所有成员的名字列表: ```bash curl -XPOST http://localhost:9200/emp/_search?pretty=true \ -H &#39;Content-Type: application/json&#39; \ -d&#39; { "_source": ["firstName","lastName"], "query":{ "match":{"department":"Sales"} } }&#39; ``` 以上就是关于如何在 Spring Boot 应用里集成 Elasticsearch 并通过 JDBC 方式访问的一些基本指导说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值