SpringBoot整合Spring Data Elasticsearch

本文介绍了如何使用SpringBoot整合Spring Data Elasticsearch,包括创建索引和映射、新增、查询、修改、聚合等操作。Spring Data Elasticsearch提供了面向对象的API,简化了与Elasticsearch的交互,支持自动文档到POJO映射和自动生成CRUD操作。

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

一.SprignBoot整合Spring Data Elasticsearch

Elasticsearch提供的Java客户端有一些不太方便的地方:

  • 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的
  • 需要自己把对象序列化为json存储
  • 查询到结果也需要自己反序列化为对象

因此,我们这里就不讲解原生的Elasticsearch客户端API了。

而是学习Spring提供的套件:Spring Data Elasticsearch

1.1.简介

Spring Data Elasticsearch是Spring Data项目下的一个子模块。

查看 Spring Data的官网:http://projects.spring.io/spring-data/

在这里插入图片描述

Spring Data 是的使命是给各种数据访问提供统一的编程接口,不管是关系型数据库(如MySQL),还是非关系数据库(如Redis),或者类似Elasticsearch这样的索引数据库。从而简化开发人员的代码,提高开发效率。

包含很多不同数据操作的模块:

在这里插入图片描述

Spring Data Elasticsearch的页面:https://projects.spring.io/spring-data-elasticsearch/

在这里插入图片描述

特征:

  • 支持Spring的基于@Configuration的java配置方式,或者XML配置方式
  • 提供了用于操作ES的便捷工具类**ElasticsearchTemplate**。包括实现文档到POJO之间的自动智能映射。
  • 利用Spring的数据转换服务实现的功能丰富的对象映射
  • 基于注解的元数据映射方式,而且可扩展以支持更多不同的数据格式
  • 根据持久层接口自动生成对应实现方法,无需人工编写基本操作代码(类似mybatis,根据接口自动得到实现)。当然,也支持人工定制查询

1.2.创建Demo工程

我们新建一个demo,学习Elasticsearch

pom依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.czxy</groupId>
    <artifactId>bos-es</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>bos-es</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

application.properties文件配置:

spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=http://127.0.0.1:9300

1.3.索引操作

1.3.1.创建索引和映射

SpringBoot-data-elasticsearch提供了面向对象的方式操作elasticsearch

业务:创建一个商品对象,有这些属性:

答:id,title,category,brand,price,图片地址

在SpringDataElasticSearch中,只需要操作对象,就可以操作elasticsearch中的数据

实体类

首先我们准备好实体类:

public class Item {
   
   
    private Long id;
    private String title; //标题
    private String category;// 分类
    private String brand; // 品牌
    private Double price; // 价格
    private String images; // 图片地址
}

映射—注解

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:

  • @Document 作用在类,标记实体类为文档对象,一般有两个属性
    • indexName:对应索引库名称
    • type:对应在索引库中的类型
    • shards:分片数量,默认5
    • replicas:副本数量,默认1
  • @Id 作用在成员变量,标记一个字段作为id主键
  • @Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
    • type:字段类型,是是枚举:FieldType,可以是text、long、short、date、integer、object等
      • text:存储数据时候,会自动分词,并生成索引
      • keyword:存储数据时候,不会分词建立索引
      • Numerical:数值类型,分两类
        • 基本数据类型:long、interger、short、byte、double、float、half_float
        • 浮点数的高精度类型:scaled_float
          • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
      • Date:日期类型
        • elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
    • index:是否索引,布尔类型,默认是true
    • store:是否存储,布尔类型,默认是false
    • analyzer:分词器名称,这里的ik_max_word即使用ik分词器

示例:

@Document(indexName = "item",type = "docs", shards = 1, replicas = 0)
public class Item {
   
   
    @Id
    private Long id;<
### 整合 ElasticsearchSpring Boot 项目 为了在 Spring Boot 项目中整合 Elasticsearch,需遵循特定的步骤来设置环境并调整配置文件。当使用 `spring-boot-starter-data-elasticsearch` 启动器时,可以通过定义相应的仓库接口轻松地执行 CRUD 操作。 #### 修改 Configuration 文件 对于配置文件而言,推荐采用 YAML 格式的 `application.yml` 来替代传统的 `.properties` 文件形式[^3]。以下是针对 Elasticsearch 的基本配置实例: ```yaml spring: elasticsearch: rest: uris: http://1xx.xxx.xxx.250:9200 ``` 此片段指定了连接到 Elasticsearch 实例所需的 URI 地址。确保替换示例 IP 和端口号为实际运行 ES 节点的位置信息。 #### 创建 Repository 接口 接着,在应用程序内创建一个继承自 `ElasticsearchRepository<T,ID>` 或者更通用版本 `ElasticsearchCrudRepository<T,ID>` 的接口用于操作指定类型的文档记录[^1][^2]。这里 T 表示映射至索引内的实体类;ID 是唯一标识符的数据类型(通常是字符串或整数)。例如: ```java package com.pro.tools.elasticsearch.dao; import com.pro.tools.elasticsearch.vo.Message; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface MessageRepository extends ElasticsearchRepository<Message, String> { } ``` 上述代码展示了如何声明一个名为 `MessageRepository` 的接口以处理消息类型的持久化逻辑。 #### 更新 data.elasticsearch 字段 如果要更改与 `data.elasticsearch` 相关的具体字段,则取决于具体的应用场景以及所使用的实体模型结构。通常情况下,这些属性会在对应的 Java 类里通过注解方式标注出来,比如利用 `@Document(indexName="messages")` 设置索引名称,或是借助 `@Field(type=FieldType.Text)` 定义字段特性等。因此,任何关于修改此类元数据的操作都应集中在实体 Bean 上完成而不是直接改动配置项本身。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值