一、配置环境 直播抓娃娃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=伊人
网友评论