Elasticsearch 入门笔记:Java 实体映射与基础配置

一、核心概念:ES 中的 “索引” 与 “实体映射”

在 Elasticsearch 中,数据以 “文档” 形式存储在 “索引” 中(类似 MySQL 中 “表” 与 “行” 的关系)。Java 中操作 ES 时,需通过实体类映射 ES 索引的结构,明确字段类型、分词规则等元信息。

二、步骤 1:定义映射实体类(核心)

实体类是 Java 对象与 ES 文档的 “桥梁”,通过注解指定索引名、字段类型、分词规则等。

@Data                               // Lombok 注解,自动生成 getter/setter/toString 等方法
@Document(indexName = "albuminfo")  // 核心注解:指定映射的 ES 索引名(类似 MySQL 表名)
@JsonIgnoreProperties(ignoreUnknown = true)  // 忽略 JSON 中实体类未定义的字段,避免反序列化报错
public class AlbumInfoIndex implements Serializable {  // 实现 Serializable 方便序列化传输
​
    private static final long serialVersionUID = 1L;  // 序列化版本号,确保序列化一致性
​
    @Id                       // 标记该字段作为 ES 文档的 _id(类似 MySQL 主键)
    private Long id;
​

    @Field(
        type = FieldType.Text,      // 字段类型为 Text:支持分词,适合全文检索
        analyzer = "ik_max_word"  // 指定分词器
    )
    private String albumTitle;
}
关键注解说明:
  • @Document(indexName = "albuminfo")

    必须注解,指定该实体类映射到 ES 的索引名称(索引名建议小写,多个单词用下划线分隔)。若索引不存在,ES 会在首次插入数据时自动创建该索引。

  • @Id

    标记实体类的某个字段作为 ES 文档的 _id(文档唯一标识),通常对应业务主键(如这里的专辑 ID)。

  • @Field

    用于配置字段的 ES 属性:

    • type = FieldType.Text:Text 类型支持分词,适合存储需要全文检索的内容(如标题、描述);

      (对比:FieldType.Keyword不分词,适合存储精确匹配的内容,如手机号、状态码)

    • analyzer = "ik_max_word" 中文分词器,提升检索时的匹配精度。

  • @JsonIgnoreProperties(ignoreUnknown = true)

    当 JSON 数据(如从 ES 查询返回的结果)中包含实体类未定义的字段时,忽略这些字段,避免抛出 “未知字段” 的反序列化异常。

三、步骤 2:配置 ES 连接信息

通过 Spring 配置文件指定 ES 服务地址,让项目能连接到 ES 集群。

spring:
  elasticsearch:
    uris: http://192.168.xxx.xxxx:9200
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
    # 可选:若项目暂不使用数据库,排除数据源自动配置,避免启动报错
四、步骤 3:定义 Repository 接口(操作 ES 的 “入口”)

通过继承 Spring Data 提供的 CrudRepository 接口,快速获得对 ES 索引的基本操作能力(无需手动写实现)。

@Repository  // 标记为数据访问层组件,被 Spring 管理
// 泛型说明:<实体类类型, 主键类型>,这里对应 AlbumInfoIndex 实体,主键类型为 Long
public interface AlbumInfoRepository extends CrudRepository<AlbumInfoIndex, Long> {
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榨菜U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值