大数据ELK(十二)Elasticsearch编程(环境准备
头条创作挑战赛
一、环境准备1、准备IDEA项目结构创建elasticsearchexample项目创建包结构如下所示
2、准备POM依赖repositories!代码库repositoryidaliyunidurlhttp:maven。aliyun。comnexuscontentgroupspublicurlreleasesenabledtrueenabledreleasessnapshotsenabledfalseenabledupdatePolicyneverupdatePolicysnapshotsrepositoryrepositoriesdependenciesdependencygroupIdorg。elasticsearch。clientgroupIdelasticsearchresthighlevelclientartifactIdversion7。6。1versiondependencydependencygroupIdorg。apache。logging。log4jgroupIdlog4jcoreartifactIdversion2。11。1versiondependencydependencygroupIdcom。alibabagroupIdfastjsonartifactIdversion1。2。62versiondependencydependencygroupIdjunitgroupIdjunitartifactIdversion4。12versionscopetestscopedependencydependencygroupIdorg。testnggroupIdtestngartifactIdversion6。14。3versionscopetestscopedependencydependenciesbuildpluginsplugingroupIdorg。apache。maven。pluginsgroupIdmavencompilerpluginartifactIdversion3。1versionconfigurationtarget1。8targetsource1。8sourceconfigurationpluginpluginsbuild
3、创建用于保存职位信息的实体类
注意:
在id字段上添加一个JSONField注解,并配置注解的serialize为false,表示该字段无需转换为JSON,因为它就是文档的唯一ID。
参考代码:
publicclassJobDetail{因为此处无需将id序列化为文档中JSONField(serializefalse)privatelongid;唯一标识privateStringarea;职位所在区域privateStringexp;岗位要求的工作经验privateStringedu;学历要求privateStringsalary;薪资范围privateStringjobtype;职位类型(全职兼职)privateStringcmp;公司名privateStringpv;浏览量privateStringtitle;岗位名称privateStringjd;职位描述publiclonggetId(){returnid;}publicvoidsetId(longid){this。idid;}publicStringgetArea(){returnarea;}publicvoidsetArea(Stringarea){this。areaarea;}publicStringgetExp(){returnexp;}publicvoidsetExp(Stringexp){this。expexp;}publicStringgetEdu(){returnedu;}publicvoidsetEdu(Stringedu){this。eduedu;}publicStringgetSalary(){returnsalary;}publicvoidsetSalary(Stringsalary){this。salarysalary;}publicStringgetJobtype(){returnjobtype;}publicvoidsetJobtype(Stringjobtype){this。jobtypejobtype;}publicStringgetCmp(){returncmp;}publicvoidsetCmp(Stringcmp){this。cmpcmp;}publicStringgetPv(){returnpv;}publicvoidsetPv(Stringpv){this。pvpv;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this。titletitle;}publicStringgetJd(){returnjd;}publicvoidsetJd(Stringjd){this。jdjd;}OverridepublicStringtoString(){returnJobDetail{idid,areaarea,expexp,eduedu,salarysalary,jobtypejobtype,cmpcmp,pvpv,titletitle,jdjd};}}
4、编写接口和实现类
cn。it。elasticsearch。service包中创建JobFullTextService接口,该接口中定义了职位全文检索相关的JavaAPI接口。
参考代码:
定义JobFullTextServicepublicinterfaceJobFullTextService{添加一个职位数据voidadd(JobDetailjobDetail);根据ID检索指定职位数据JobDetailfindById(longid)throwsIOException;修改职位薪资voidupdate(JobDetailjobDetail)throwsIOException;根据ID删除指定位置数据voiddeleteById(longid)throwsIOException;根据关键字检索数据ListJobDetailsearchByKeywords(Stringkeywords)throwsIOException;分页检索MapString,ObjectsearchByPage(Stringkeywords,intpageNum,intpageSize)throwsIOException;scroll分页解决深分页问题MapString,ObjectsearchByScrollPage(Stringkeywords,StringscrollId,intpageSize)throwsIOException;关闭ES连接voidclose()throwsIOException;;}
5、创建实现类
在cn。it。elasticsearch。service。impl包下创建一个实现类:JobFullTextServiceImpl,并实现上面的接口。
参考代码:
publicclassJobFullTextServiceImplimplementsJobFullTextService{Overridepublicvoidadd(JobDetailjobDetail){}Overridepublicvoidupdate(JobDetailjobDetail){}OverridepublicJobDetailfindById(longid){returnnull;}OverridepublicbooleandeleteById(longid){returnfalse;}OverridepublicListJobDetailsearchByKeywords(Stringkeywords){returnnull;}OverridepublicMapString,ObjectsearchByPage(Stringkeywords,intpageNum,intpageSize){returnnull;}OverridepublicMapString,ObjectsearchByScrollPage(Stringkeywords,StringscrollId,intpageSize){returnnull;}}