spring boot集成elasticsearch

2018-11-21  本文已影响14人  a0f39b0b2030

一、配置环境 直播抓娃娃APP开发找上海捌跃网络科技有限公司

spring boot 1.5.2.RELEASE

Elasticsearch:2.4.4 需要进行软件安装并在项目运行的过程中启动

elasticsearch依赖包:spring-boot-starter-data-elasticsearch:2.1.3.RELEASE

jNA依赖包:net.java.dev.jna:jna:4.3.0

二、配置elasticsearch端口

修改application.properties

#Elasticsearch服务地址

spring.data.elasticsearch.cluster-nodes=localhost:9300

#设置链接超时时间

spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s

三、正文

//@Document 标识是一个文档  indexName:索引的名称@Document(indexName="blog",type="blog")publicclassEsBlogimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id//主键privateString id;privateString title;privateString summary;privateString content;protectedEsBlog(){//JPA 规范要求,防止直接使用}publicEsBlog(String title,String summary,String content){this.title=title;this.summary=summary;this.content=content;}publicStringgetId(){returnid;}publicvoidsetId(String id){this.id=id;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(String title){this.title=title;}publicStringgetSummary(){returnsummary;}publicvoidsetSummary(String summary){this.summary=summary;}publicStringgetContent(){returncontent;}publicvoidsetContent(String content){this.content=content;}@OverridepublicStringtoString(){return"EsBlog [id="+id+", title="+title+", summary="+summary+", content="+content+"]";}}

//String是ID的类型publicinterfaceEsBlogRepositoryextendsElasticsearchRepository<EsBlog,String>{/**

* 根据方法名可以替代sql查询,title是实体类的属性

* Pageable 是返回的内容

* 下午4:41:42

*/Page<EsBlog>findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title,String summary,String content,Pageable pageable);}

测试类

@RunWith(SpringRunner.class)@SpringBootTestpublicclassBlogRepositoryTest{@AutowiredprivateEsBlogRepository esBlogRepository;@BeforepublicvoidinitRepositoryData(){// 清空所有esBlogRepository.deleteAll();esBlogRepository.save(newEsBlog("《关雎》","关关雎鸠","关关雎鸠,在河之洲。窈窕淑女,君子好逑。参差荇菜,左右流之。窈窕淑女,寤寐求之。求之不得,寤寐思服。"));esBlogRepository.save(newEsBlog("《蒹葭》","蒹葭苍苍","蒹葭苍苍,白露为霜。所谓伊人,在水一方。溯洄从之,道阻且长;溯游从之,宛在水中央。蒹葭凄凄,白露未晞"));esBlogRepository.save(newEsBlog("《采薇》","采薇采薇","采薇采薇,薇亦作止。曰归曰归,岁亦莫止。靡家靡室,猃狁之故。不遑启居,猃狁之故。采薇采薇,薇亦柔止。"));}@TestpublicvoidtestFindDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(){Pageable pageable=newPageRequest(0,20);String title="关";String summary="关关";String content="伊人";Page<EsBlog>page=esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title,summary,content,pageable);//assertThat(page.getTotalElements()).isEqualTo(2);for(EsBlog esBlog:page){System.out.println(esBlog.toString());}}}

Controller类:

@RestController@RequestMapping("/blogs")publicclassBlogController{@AutowiredprivateEsBlogRepository esBlogRepository;@GetMappingpublicList<EsBlog>list(@RequestParam(value="title",required=false,defaultValue="")String title,@RequestParam(value="summary",required=false,defaultValue="")String summary,@RequestParam(value="content",required=false,defaultValue="")String content,@RequestParam(value="pages",required=false,defaultValue="0")intpages,@RequestParam(value="limit",required=false,defaultValue="10")intlimit){// 数据在 Test 里面先初始化了,这里只管取数据Pageable pageable=newPageRequest(pages,limit);Page<EsBlog>page=esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title,summary,content,pageable);returnpage.getContent();}}

运行之前需要启动着Elasticsearch服务,并在application.properties中配置:spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

运行url:http://localhost:8080/blogs?title=关&summary=关关&content=伊人

转自:http://blog.51cto.com/mazongfei/2320127
上一篇 下一篇

猜你喜欢

热点阅读