Spring Data ElasticSearch 使用
1.1 Spring Data ElasticSearch简介
1.1.1 什么是Spring Data
Spring Data是一个用于简化持久层数据访问的开源框架。其主要目标是使得对数据的访问变得方便快捷。 Spring Data可以极大的简化数据操作的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。包括CRUD外,还包括如分页、排序等一些常用的功能,几乎可以节省持久层代码80%以上的编码工作量。
Spring Data的官网:http://projects.spring.io/spring-data/
Spring Data常用的功能模块如下
1.1.2 什么是Spring Data ElasticSearch
Spring Data ElasticSearch 基于 spring data API 简化 elasticSearch操作,将原始操作elasticSearch的客户端API 进行封装 。Spring Data为Elasticsearch项目提供集成搜索引擎。Spring Data Elasticsearch POJO的关键功能区域为中心的模型与Elastichsearch交互文档和轻松地编写一个存储库数据访问层
官方网站:http://projects.spring.io/spring-data-elasticsearch/
1.2 环境搭建
实现步骤:
- 创建SpringBoot的项目
- 勾选starter依赖坐标
- 编写持久层接口GoodDao,编写pojo实体类
- 配置文件,集群配置,ElasticSearch服务地址http://127.0.0.1:9300
实现过程:
-
创建SpringBoot的项目
2.勾选starter依赖坐标
-
编写持久层接口GoodDao,编写pojo实体类
public interface GoodDao { }
pojo实体类,商品good
public class Good { private Long id;//商品的唯一标识 private String title;//标题 private String category;//分类 private String brand;//品牌 private Double price;//价格 private String images;//图片地址 //getter,setter,toString }
-
配置文件,集群配置,ElasticSearch服务地址http://127.0.0.1:9300
# 配置集群名称 spring.data.elasticsearch.cluster-name=elasticsearch # 配置es的服务地址 spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
1.3 常用操作
、创建索引库操作
几个用到的注解:
- @Document:声明索引库配置
- indexName:索引库名称
- type:类型名称,默认是“docs”
- shards:分片数量,默认5
- replicas:副本数量,默认1
- @Id:声明实体类的id
- @Field:声明字段属性
- type:字段的数据类型
- analyzer:指定分词器类型
- index:是否创建索引 默认为true
- store:是否存储 默认为false
实体类配置:
/**
* 商品实体类
* @Document() 注解作用:定义一个索引库,一个类型
* indexName属性:指定索引库的名称
* type属性:指定类型名称
* shards属性:指定分片数
* replicas属性:指定复制副本数
*/
@Document(indexName = "heima4",type = "goods",shards = 5,replicas = 1)
public class Good {
//必须有id,这里的id是全局唯一的标识,等同于es中的“_id”
@Id
private Long id;
/**
* type: 字段数据类型
* analyzer: 分词器类型
* index: 是否索引(默认值:true)
* store: 是否存储(默认值:false)
*/
@Field(type = FieldType.Text,analyzer = "ik_max_word")
private String title;//标题
@Field(type = FieldType.Keyword)
private String category;//分类
@Field(type = FieldType.Keyword)
private String brand;//品牌
@Field(typ