SpringData整合ElasticSearch

news/2024/11/17 9:40:55/

一、环境搭建

1.Maven依赖

 	<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.6.RELEASE</version><relativePath/></parent><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</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-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency></dependencies>

2.配置文件的编写

# es 服务地址
elasticsearch.host=127.0.0.1
# es 服务端口
elasticsearch.port=9200
# 配置日志级别,开启 debug 日志
logging.level.com.maoyan.es=debug

3.书写一个普通的启动类

@SpringBootApplication
public class SpringDataElasticSearchMainApplication {public static void main(String[] args) {SpringApplication.run(SpringDataElasticSearchMainApplication.class,args);}
}

4.书写ES的配置类

@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Data
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration{private String host ;private Integer port ;//重写父类方法@Overridepublic RestHighLevelClient elasticsearchClient() {RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);return restHighLevelClient;}
}

二、相关准备

1.准备一个实体类(类名及索引,属性及文档字段)

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(indexName = "product",shards = 3,replicas = 1)
public class Product {@Idprivate Long id;//商品唯一标识@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;//商品名称@Field(type = FieldType.Keyword)private String category;//分类名称@Field(type = FieldType.Double)private Double price;//商品价格@Field(type = FieldType.Keyword,index = false)private String images;//图片地址
}

2.书写操作文档的dao层

@Repository
public interface ProductDao extends ElasticsearchRepository<Product,Long> {
}

三、操作代码展示

1.对索引的操作

//索引操作
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataESIndexTest {//注入 ElasticsearchRestTemplate@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;//创建索引并增加映射配置@Testpublic void createIndex(){//创建索引,系统初始化会自动创建索引System.out.println("创建索引");}@Testpublic void deleteIndex(){//创建索引,系统初始化会自动创建索引boolean flg = elasticsearchRestTemplate.deleteIndex(Product.class);System.out.println("删除索引 = " + flg);}
}

2.对文档的操作

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataESProductDaoTest {@Autowiredprivate ProductDao productDao;//新增	@Testpublic void save() {Product product = new Product();product.setId(1L);product.setTitle("华为手机");product.setCategory("手机");product.setPrice(2999.0);product.setImages("http://www.atguigu/hw.jpg");productDao.save(product);}//修改@Testpublic void update() {Product product = new Product();product.setId(1L);product.setTitle("小米 2 手机");product.setCategory("手机");product.setPrice(9999.0);product.setImages("http://www.atguigu/xm.jpg");productDao.save(product);}//根据 id 查询@Testpublic void findById() {Product product = productDao.findById(1L).get();System.out.println(product);}//查询所有@Testpublic void findAll() {Iterable<Product> products = productDao.findAll();for (Product product : products) {System.out.println(product);}}//删除@Testpublic void delete() {Product product = new Product();product.setId(1L);productDao.delete(product);}//批量新增@Testpublic void saveAll() {List<Product> productList = new ArrayList<>();for (int i = 0; i < 10; i++) {Product product = new Product();product.setId(Long.valueOf(i));product.setTitle("[" + i + "]小米手机");product.setCategory("手机");product.setPrice(1999.0 + i);product.setImages("http://www.atguigu/xm.jpg");productList.add(product);}productDao.saveAll(productList);}//分页查询@Testpublic void findByPageable() {//设置排序(排序方式,正序还是倒序,排序的 id)Sort sort = Sort.by(Sort.Direction.DESC, "id");int currentPage = 0;//当前页,第一页从 0 开始,1 表示第二页int pageSize = 5;//每页显示多少条//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);//分页查询Page<Product> productPage = productDao.findAll(pageRequest);for (Product Product : productPage.getContent()) {System.out.println(Product);}}
}

3.文档搜索

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataESSearchTest {@Autowiredprivate ProductDao productDao;/*** term 查询* search(termQueryBuilder) 调用搜索方法,参数查询构建器对象*/@Testpublic void termQuery() {TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", " 小米");Iterable<Product> products = productDao.search(termQueryBuilder);for (Product product : products) {System.out.println(product);}}/*** term 查询加分页*/@Testpublic void termQueryByPage() {int currentPage = 0;int pageSize = 5;//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize);TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", " 小米");Iterable<Product> products = productDao.search(termQueryBuilder, pageRequest);for (Product product : products) {System.out.println(product);}}
}

http://www.ppmy.cn/news/244095.html

相关文章

小米9es更新MIUI 11.0.3.0稳定版本,解决耗电问题

等待以已久的小米MIUI11系统终于迎来更新。今天早上有不少米粉称已经更新小米MIUI11.0.3.0稳定版本&#xff0c;本次更新大小为700M。 更新主要内容&#xff1a; 全面成熟和完善的全面屏设计&#xff0c;去除多余的视觉符号&#xff0c;采用精心设计大屏触控互交控件&#xff…

ElasticSearch快速入门实战

全文检索 数据分类&#xff1a; 结构化数据&#xff1a; 固定格式&#xff0c;有限长度 比如mysql存的数据非结构化数据&#xff1a;不定长&#xff0c;无固定格式 比如邮件&#xff0c;word文档&#xff0c;日志半结构化数据&#xff1a; 前两者结合 比如xml&#xff0c;htm…

Elasticsearch HTTP查询

1、条件查询 匹配查询 {"query": {"match": {"category": "小米"}} } 查询全部 {"query": {"match_all": {}} } 2、分页查询 查询第二页的数据&#xff0c;并且只获取title字段。 {"query": {&q…

SpringData集成Elasticsearch

Spring Data 是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的 开源框架。其主要目标是使得对数据的访问变得方便快捷&#xff0c;并支持 map-reduce 框架和云计 算数据服务。 Spring Data 可以极大的简化 JPA&#xff08;Elasticsearch„&#xf…

ElasticSearch学习文档

author Gandalf 介绍 ES是什么 Elasticsearch实时的分布式全文搜索分析引擎&#xff0c;内部使用Lucene做索引与搜索&#xff0c;开发语言为Java 全文&#xff1a;对全部的文本内容进行分析&#xff0c;建立索引&#xff0c;使之可以被搜索 实时&#xff1a;新增到 ES 中的…

ElasticSearch学习随笔之嵌套操作

ElasticSearch 1、ElasticSearch学习随笔之基础介绍 2、ElasticSearch学习随笔之简单操作 3、ElasticSearch学习随笔之java api 操作 4、ElasticSearch学习随笔之SpringBoot Starter 操作 5、ElasticSearch学习随笔之嵌套操作 6、ElasticSearch学习随笔之分词算法 7、ElasticS…

C++中流的分类

前言 关于流本质的问题&#xff0c;其实从我刚开始学习C的时候&#xff0c;就已经存在了。当时找了不少的资料&#xff0c;不过一直处于那种知其然而不知其所以然的状态&#xff0c;关于流的本质问题我还是一直没有搞通&#xff0c;始终就是懵懵懂懂的。 不过在今天&#xff0…

01 ElasticSearch笔记

1.ElasticSearch简介 1.1 ElasticSearch&#xff08;简称ES&#xff09; Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。 客户端支持Java、.NET&#xff08…