spring-boot学习笔记(三)ElasticSearch介绍与项目集成

举报
小米粒-biubiubiu 发表于 2020/11/30 23:01:52 2020/11/30
5.3k+ 0 0
【摘要】 一、ElasticSearch介绍 分布式高可用,例如将一个系统部署在一台服务器上面,某一天崩溃了,该系统就无法使用了,但是当分布式部署到多台服务器上面之后,其中几个服务器崩溃掉了,但是不会影响整体的运作,从而实现高可用。 二、ElasticSearch项目集成 1、build.gradle添加es依赖和jna依赖,application.properties配置文件...

一、ElasticSearch介绍


分布式高可用,例如将一个系统部署在一台服务器上面,某一天崩溃了,该系统就无法使用了,但是当分布式部署到多台服务器上面之后,其中几个服务器崩溃掉了,但是不会影响整体的运作,从而实现高可用。


二、ElasticSearch项目集成

1、build.gradle添加es依赖和jna依赖,application.properties配置文件添加es服务地址和连接超时时间


      dependencies {
      	compile('org.springframework.boot:spring-boot-starter-web')
      	compile('org.springframework.boot:spring-boot-starter-thymeleaf')
      	compile('org.springframework.boot:spring-boot-starter-data-jpa')
      	compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
      	runtime('com.h2database:h2:1.4.196')
      	testCompile('org.springframework.boot:spring-boot-starter-test')
      	compile('mysql:mysql-connector-java:6.0.5')
      	compile('net.java.dev.jna:jna:4.5.1')
      }
  
 

      #elasticSearch服务地址
      spring.data.elasticsearch.cluster-nodes=localhost:9300
      #设置连接超时时间
      spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s
  
 

2、下载elasticsearch-6.3.0,解压到d:盘下,打开D:\elasticsearch-6.3.0\bin ,点击elasticsearch.bat 启动es服务,

访问本地9200端口,看到es版本信息说明启动成功。

3、编写测试用例

新建EsBlog实体类


       */
      @Document(indexName="blog",type="blog")
      public class EsBlog implements Serializable {
      	/**
      	 *
      	 */
      	private static final long serialVersionUID = 159383211493905568L;
      	@Id
      	private String id;
      	private String title;
      	private String summary;
      	private String content;
  
 

编写接口继承ElasticsearchRepository


      public interface EsBlogRepository extends  ElasticsearchRepository<EsBlog, String> {
      	/**
      	 * 分页查询博客去重
      	 * @param title
      	 * @param summary
      	 * @param content
      	 * @param pageable
      	 * @return Page<EsBlog>
      	 */
      	Page<EsBlog>  findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title,String summary,String content,Pageable pageable);
      }
  
 

编写测试test代码


      @RunWith(SpringRunner.class)
      @SpringBootTest
      public class EsBlogRepositoryTest {
      	@Autowired
      	private EsBlogRepository esBlogRepository;
      	public void initRepositoryData() {
      		/**
      		 * 删除所有数据
      		 */
      		esBlogRepository.deleteAll();
      		/**
      		 * 初始化三个blog
      		 */
      		esBlogRepository.save(new EsBlog("1", "段", "段朝旭"));
      		esBlogRepository.save(new EsBlog("2", "朝", "段朝旭"));
      		esBlogRepository.save(new EsBlog("3", "旭", "段朝旭"));
      	}
      	/**
      	 * 分页查询博客去重
      	 *
      	 * @param title
      	 * @param summary
      	 * @param content
      	 * @param pageable
      	 * @return Page<EsBlog>
      	 */
      	@Test
      	public void findDistinctEsBlogByTitleContaingOrSummaryContaingOrContentContaing() {
      		initRepositoryData();
      		Pageable pageable = PageRequest.of(0, 20);
      		Page<EsBlog> page = esBlogRepository
       .findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining("1", "旭", "王", pageable);
      		System.out.println(page.getTotalElements());
      		for (EsBlog blog : page.getContent()) {
      			System.out.println(blog);
      		}
      	}
  
 

运行测试代码之后看到控制台打印出


说明执行成功。

4、编写controller层


      @RestController
      @RequestMapping("/blog")
      public class EsBlogController {
      	@Autowired
      	private EsBlogRepository  esBlogRepository;
      	@GetMapping
      	public List<EsBlog>  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 = PageRequest.of(pageIndex,pageSize);
      		Page<EsBlog> page = esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title,summary,content,pageable);
      		return page.getContent();
      	}
      }
  
 

访问如图所示的地址,可看到返回的json格式数据


文章来源: blog.csdn.net,作者:血煞风雨城2018,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31905135/article/details/80856073

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。