Spring Boot带前后端 渐进式开发企业级博客系统(第7章)

springboot整合elasticsearch
  springboot版本是1.5.4,elasticsearch的版本是2.4.4 ,我使用了springboot 2.0.5版本整合elasticsearch没有成功,在网上搜了一下,这和版本有关系,所以版本是本次案例能不能成功的重要因素。另外也可以不启动客户端,区别在于成功的索引数据放的位置只是有所不同。
(1)引入依赖:

	<!-- easticsearch2.4.4 版本的引入 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<!-- 调用本地方法库,把数据存储到项目下 -->
		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna</artifactId>
		</dependency>

bean:

@Document(indexName = "test", type = "blog", shards = 1, replicas = 0, refreshInterval = "-1")
//@XmlRootElement // MediaType 转为 XML
//文档
public class EsBlog implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	private String id;
	private String title;
	private String summary;
	private String content;
	public EsBlog() {
		super();
	}
	public EsBlog( String title, String summary, String content) {
		super();
		this.title = title;
		this.summary = summary;
		this.content = content;
	}

Repository:


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

controller:


@RestController
@RequestMapping("/blogs")
public class EsBlogController {
	@Autowired
	private EsBlogRepository esBlogRepository;
	@GetMapping("/search")
	public List<EsBlog> search(@RequestParam("title")String title, @RequestParam("summary")String summary,
			@RequestParam("content")String content,@RequestParam("pageIndex")int pageIndex,@RequestParam("pageSize")int pageSize){
		Pageable Pageable = new PageRequest(pageIndex,pageSize);
		Page<EsBlog> page = esBlogRepository.findDistinctByTitleContainingOrSummaryContainingOrContent(title, summary,
				content, Pageable);
		return page.getContent();
		
	}

}

application.properties:

#连接超时的时间
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s
#存储索引的位置
spring.data.elasticsearch.properties.path.home=data/elasticsearch

测试案例:


@RunWith(SpringRunner.class)
@SpringBootTest
public class EsBlogRepositoryTest {
	@Autowired
	private EsBlogRepository esBlogRepository;

	@Before
	public void initRepositoryData() {
	
		// 清除所有数据
		esBlogRepository.deleteAll();
		esBlogRepository
				.save(new EsBlog("老卫跟你谈谈安装 Elasticsearch", "关于如何来安装 Elasticsearch", "这个请看我的博客 https://waylau.com"));
		esBlogRepository.save(
				new EsBlog("老卫跟你谈谈 Elasticsearch 的几个用法", "关于如何来用 Elasticsearch", "还是得看我的博客 https://waylau.com,妹")); // 关键字"妹"
		esBlogRepository
				.save(new EsBlog("老卫和你一起学 Elasticsearch", "如何来学习 Elasticsearch", "最终看我的博客 https://waylau.com,酒")); // 关键字"酒"

		esBlogRepository.save(new EsBlog("03-05 用大白话聊聊分布式系统", "一提起“分布式系统”", "大家的第一感觉就是好高大上啊,深不可测"));
		esBlogRepository.save(
				new EsBlog("02-19 Thymeleaf 3 引入了新的解析系统", "如果你的代码使用了 HTML5 的标准", "而Thymeleaf 版本来停留在 2.x ,那么如果没有把闭合"));
		esBlogRepository.save(new EsBlog("02-19 使用 GFM Eclipse 插件时,不在项目里面生成 HTML 文件",
				"GFM 是 GitHub Flavored Markdown Viewer 的简称", "是一款对 GitHub 友好的 Markdown 编辑器 。"));
	}

	@Test
	public void testFindDistinctByTitleContainingOrSummaryContainingOrContent() {
		Pageable Pageable = new PageRequest(0, 20);
		String title = "妹";
		String summary = "妹";
		String content = "酒";
		Page<EsBlog> page = esBlogRepository.findDistinctByTitleContainingOrSummaryContainingOrContent(title, summary,
				content, Pageable);
		for(EsBlog blog:page) {
			System.out.println(blog);
		}
		
		assertThat(page.getTotalElements()).isEqualTo(1);
		
	}

}

测试生成的工程目录:把生成的索引放在了工作目录,因为我没有启动客户端,所以就放在工程目录下。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39380737/article/details/82821550