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

举报
小米粒-biubiubiu 发表于 2020/10/22 10:49:39 2020/10/22
【摘要】 spring-boot学习笔记(三)ElasticSearch介绍与项目集成

一、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格式数据



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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