文章目录
一、创建springboot项目
这里不做演示
二、导入es依赖坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
三、创建实体类
package com.example.springboot_es.user; import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; /** * @Author: Ljx * @Date: 2021/12/3 13:14 * @role: */ //indexName 指定索引名称 @Document(indexName = "lx-sd") @Data public class Article { @Id @Field(index = false,type = FieldType.Integer) private Integer id; /** * index:是否设置分词 默认为true * analyzer:储存时使用的分词器 * searchAnalyze:搜索时使用的分词器 * store:是否存储 默认为false * type:数据类型 默认值是FieldType.Auto * */ @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text) private String title; @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text) private String context; @Field(store = true,type = FieldType.Integer) private Integer hits; }
四、创建dao层
package com.example.springboot_es.dao; import com.example.springboot_es.user.Article; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; import org.springframework.stereotype.Component; import java.util.List; /** * @Author: Ljx * @Date: 2021/12/3 13:29 * @role: */ /** * 自定义接口需要继承ElasticsearchRepository<实体类型,主键类型> 基本的crud 分页 */ @Component public interface ArticleDao extends ElasticsearchRepository<Article,Integer> { /** * 根据标题查询 * @param title * @return */ List<Article> findByTitle(String title); /** * 根据标题或内容查询 * @param title * @param context * @return */ List<Article> findByTitleOrContext(String title,String context); /** * 根据标题或内容查询(含分页) * @param title * @param context * @param pageable * @return */ List<Article> findByTitleOrContext(String title, String context, Pageable pageable); }
五、添加配置类
spring: elasticsearch: rest: uris: localhost:9200 read-timeout: 30s connection-timeout: 5s
六、测试
package com.example.springboot_es; import com.example.springboot_es.dao.ArticleDao; import com.example.springboot_es.user.Article; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import java.util.List; import java.util.Optional; @SpringBootTest public class Estest { @Autowired private ElasticsearchRestTemplate template; @Autowired private ArticleDao articleDao; //通过springboot es向elasticsearch数据库储存一条数据 @Test public void testSave() { //创建文档 Article article = new Article(); article.setId(1); article.setTitle("es搜索"); article.setContext("成功了吗"); //保存文档 articleDao.save(article); } //修改 @Test public void testUpdate() { //判断数据库中是否有你指定的id的文档,如果没有。就进行保存,如果有,就进行更新 //创建文档 Article article = new Article(); article.setId(1); article.setTitle("es搜索1"); article.setContext("成功了吗1"); //保存文档 articleDao.save(article); } //删除 @Test public void testDelete() { // 根据主键删除 articleDao.deleteById(1); } //重新构建数据 @Test public void makeData(){ for (int i = 1; i <= 10; i++) { //创建文档 Article article = new Article(); article.setId(i); article.setTitle("es搜索"+i); article.setContext("成功了吗"+i); article.setHits(100+i); //保存数据 articleDao.save(article); } } //查询所有 @Test public void findAll(){ Iterable<Article> all = articleDao.findAll(); for (Article article : all) { System.out.println(article); } } //主键查询 @Test public void testFindById(){ Optional<Article> id = articleDao.findById(1); System.out.println(id.get()); } //分页查询 @Test public void testFindAllWithPage(){ //设置分页条件 //page代表页码,从0开始 PageRequest pageRequest = PageRequest.of(1, 3); Page<Article> all = articleDao.findAll(pageRequest); for (Article article : all) { System.out.println(article); } } //排序查询 @Test public void testFindWithSort(){ //设置排序条件 Sort sort = Sort.by(Sort.Order.desc("hits")); Iterable<Article> all = articleDao.findAll(sort); for (Article article : all) { System.out.println(article); } } //分页加排序查询 @Test public void testFindAllWithPageAndSort(){ //设置排序条件 Sort sort = Sort.by(Sort.Order.desc("hits")); //设置分页条件 PageRequest pageable = PageRequest.of(1, 3, sort); Page<Article> page = articleDao.findAll(pageable); for (Article article : page.getContent()) { System.out.println(article); } } //根据标题查询 @Test public void testFindByTitle(){ List<Article> es = articleDao.findByTitle("es"); for (Article e : es) { System.out.println(e); } } //根据标题或内容查询 @Test public void testFindByTitleOrContext(){ List<Article> es = articleDao.findByTitleOrContext("es", "1"); for (Article e : es) { System.out.println(e); } } //根据标题和内容查询(含分页) @Test public void testFindByTitleOrContextWithPage(){ //设置排序条件 Sort sort = Sort.by(Sort.Order.desc("hits")); //设置分页条件 PageRequest pageRequest = PageRequest.of(1, 3, sort); List<Article> es = articleDao.findByTitleOrContext("es", "1", pageRequest); for (Article e : es) { System.out.println(e); } } }