# es **Repository Path**: SunPeng-3/es ## Basic Information - **Project Name**: es - **Description**: Springboot和Elasticsearch 整合 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # es #### 项目介绍 Springboot和Elasticsearch 整合 #### 软件架构 **Springboot、给本地安装 elasticsearch-6.5.1 windows版本的** **解压以后 ** ![输入图片说明](https://images.gitee.com/uploads/images/2018/1128/152655_48cebc50_766416.png "屏幕截图.png") **双击 elasticsearch.bat 启动就可以后续的工作了 ** **- 1. 第一步骤 配置 pom.xml 加入Elasticsearch 相关的依赖jar** ``` org.springframework.boot spring-boot-starter-data-elasticsearch net.java.dev.jna jna 4.3.0 ``` **- 2. 第二步骤 配置 application.properties ** ``` #设置端口 server.port=80 # 设置 elasticsearch 服务地址 spring.data.elasticsearch.cluster-nodes=localhost:9300 # 设置 elasticsearch 连接超时时间 spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s ``` **- 3. 第三步骤 创建 文档类 ** ``` package com.belle.springbootelasticsearch.domain; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import java.io.Serializable; /** * @ClassName EsBlog * @Description Es 文档类 * @Author sunp * @Date 2018/11/28 14:17 * @Version 0.0.1 **/ @Document(indexName = "blog",type = "blog") //标识 文档 public class EsBlog implements Serializable { @Id //标识主键 private String id; //标题 private String title; //摘要 private String summary; //正文内容 private String content; protected EsBlog(){ //JPA 规范要求,防止直接使用 } public EsBlog( String title,String summary, String content){ this.title = title; this.summary = summary; this.content = content; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "EsBlog{" + "id='" + id + '\'' + ", title='" + title + '\'' + ", summary='" + summary + '\'' + ", content='" + content + '\'' + '}'; } } ``` **- 4. 第四步骤 创建Es Repository 资源库 接口 ** ``` package com.belle.springbootelasticsearch.repository; import com.belle.springbootelasticsearch.domain.EsBlog; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; /** * @ClassName EsBlogRepository * @Description Es Repository 资源库 接口 * @Author sunp * @Date 2018/11/28 14:18 * @Version 0.0.1 **/ public interface EsBlogRepository extends ElasticsearchRepository { /** * 分页查询博客(去重) * @param title * @param summary * @param content * @param pageable * @return */ Page findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title, String summary, String content, Pageable pageable); } ``` **- 5. 第五步骤 创建SpringbootElasticsearchApplicationTests 测试类测试 ** ``` package com.belle.springbootelasticsearch; import com.belle.springbootelasticsearch.domain.EsBlog; import com.belle.springbootelasticsearch.repository.EsBlogRepository; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; 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.Pageable; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class SpringbootElasticsearchApplicationTests { @Autowired private EsBlogRepository esBlogRepository; @Before public void initRepository(){ //清除所有数据 esBlogRepository.deleteAll(); //初始化数据 esBlogRepository.save(new EsBlog("登黄鹤楼","王之涣的登黄鹤楼","白日依山尽,黄河入海流,欲穷千里目,更上一层楼。")); esBlogRepository.save(new EsBlog("相思","王维的相思","红豆生南国,春来发几枝,愿君多采撷,此物最相思。")); esBlogRepository.save(new EsBlog("静夜思","李白的静夜思","床前明月光,疑是地上霜。举头望明月,低头思故乡。")); } @Test public void contextLoads() { Pageable pageable = new PageRequest(0,20); String title = "思"; String summary = "相思"; String content = "相思"; Page page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title,summary,content,pageable); for (EsBlog blog : page.getContent()){ System.out.println(blog.toString()); } } } ``` **- 6. 第六步骤 查看测试结果 ** ![输入图片说明](https://images.gitee.com/uploads/images/2018/1128/151604_24ba8d52_766416.png "测试.png") **- 7. 第七步骤 创建controller 外部调用接口 ** ``` package com.belle.springbootelasticsearch.controller; import com.belle.springbootelasticsearch.domain.EsBlog; import com.belle.springbootelasticsearch.repository.EsBlogRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @ClassName ElasticSearchController * @Description ES 学习 * @Author sunp * @Date 2018/11/28 14:16 * @Version 0.0.1 **/ @RestController @RequestMapping("/es") public class ElasticSearchController { @Autowired private EsBlogRepository blogRepository; @GetMapping public List list(@RequestParam(value = "title") String title, @RequestParam(value = "summary") String summary, @RequestParam(value = "content") String content, @RequestParam(value = "pageIndex",defaultValue = "0") int pageIndex, @RequestParam(value = "pageSize",defaultValue = "10") int pageSize){ Pageable pageable = new PageRequest(pageIndex,pageSize); Page page = blogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title, summary, content, pageable); return page.getContent(); } } ``` **- 8. 第八步骤 用Postman 查询调用结果 ** ![输入图片说明](https://images.gitee.com/uploads/images/2018/1128/151749_c3fc1e90_766416.png "测试1.png")