本发明涉及数据检索,具体涉及一种基于java注解实现的elasticsearch检索方法。
背景技术:
1、在互联网飞速发展的过程中,随着公司规模的不断扩大和业务体系的不断升级,业务数据会快速膨胀到几亿、几十亿都是很常见的,如何能将如此大规模的数据快速检索出来成了行业的共有问题。elasticsearch是一种能支持海量数据存储与检索的数据存储,elasticsearch虽然性能优越,但是对于开发人员来讲,上手成本较高,实现检索的复杂度较大,如何让开发人员以最快的速度上手并实现使用就成了关键。
2、目前,业界提供的针对elasticsearch检索的客户端有spring-data-elasticsearch、bboos、resthighlevelclient等,开发人员均有较高的使用门槛,而且需要自行组装查询api或者组装查询模版,都有较大的工作量,开发效率低下。
技术实现思路
1、为了解决上述问题,使开发人员更快速便捷使用elasticsearch,本发明提出了基于注解检索elasticsearch的方法,开发人员可以轻量级的上手使用,无需任何elasticsearch基础。
2、为实现上述目的,本发明采用的技术方案如下:
3、一种基于java注解实现的elasticsearch检索方法,包括以下步骤:
4、步骤1、定义java注解,每一个java注解对应一个elasticsearch查询语法;
5、步骤2、定义每个java注解的api;
6、步骤3、获取java对象a,一个java对象a包含一个或多个检索字段,根据检索字段的elasticsearch查询语法,选择对应的java注解标识在每个检索字段上;
7、步骤4、递归解析出java对象a中标识有java注解的检索字段,调用java注解对应的api,生成elasticsearch查询语句,通过elasticsearch查询语句得到elasticsearch检索结果;
8、步骤5、将elasticsearch的检索结果解析为java对象b并返回。
9、进一步地,步骤2中,每个java注解封装有一个api:api的入参field为检索字段、value为检索字段值,每一个api对应有一个解析方法。
10、进一步地,解析方法的方法体是先获取检索字段的java注解,然后根据java注解获取检索字段的字段名,再将检索字段的字段名与检索字段值组装为elasticsearch查询语句。
11、进一步地,步骤4包括以下操作:步骤41、利用java反射获取java检索对象所有检索字段;步骤42、遍历所有检索字段,每一个检索字段根据标注的java注解调用对应api的解析方法,组装elasticsearch的检索语句;步骤43、通过elasticsearch的检索语句得到elasticsearch的检索结果。
12、进一步地,步骤41包括:调用object类的getclass()函数,得到java检索对象所有检索字段,调用class.getdeclaredfields()函数,得到检索字段中所有属性。
13、进一步地,步骤41中,当得到的检索字段为嵌套对象时,迭代重复步骤41。
14、进一步地,步骤42中,若检索字段为父类检索字段,对父类检索字段的java注解进行递归,根据递归后最上层父类检索字段标注的java注解调用对应的api。
15、进一步地,步骤5包括以下操作:步骤51、提取elasticsearch的检索结果返回的hits数组;步骤52、遍历hits数组;步骤53、将每一个hits数组元素序列化为json数据,再将json数据解析为java对象b。
16、与现有技术相比,本发明具有以下有益效果:
17、本发明基于java注解快速实现elasticsearch的检索,节省了开发人员学习elasticsearch的时间成本,无需自行组装复杂的elasticsearch查询语句,极大提高了开发效率。本发明通过递归复用java注解的解析内核,实现检索逻辑的无限嵌套。
1.一种基于java注解实现的elasticsearch检索方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤2中,每个java注解封装有一个api:api的入参field为检索字段、value为检索字段值,每一个api对应有一个解析方法。
3.根据权利要求2所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,解析方法的方法体是先获取检索字段的java注解,然后根据java注解获取检索字段的字段名,再将检索字段的字段名与检索字段值组装为elasticsearch查询语句。
4.根据权利要求2所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤4包括以下操作:步骤41、利用java反射获取java检索对象所有检索字段;步骤42、遍历所有检索字段,每一个检索字段根据标注的java注解调用对应api的解析方法,组装elasticsearch的检索语句;步骤43、通过elasticsearch的检索语句得到elasticsearch的检索结果。
5.根据权利要求4所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤41包括:调用object类的getclass()函数,得到java检索对象所有检索字段,调用class.getdeclaredfields()函数,得到检索字段中所有属性。
6.根据权利要求5所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤41中,当得到的检索字段为嵌套对象时,迭代重复步骤41。
7.根据权利要求4所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤42中,若检索字段为父类检索字段,对父类检索字段的java注解进行递归,根据递归后最上层父类检索字段标注的java注解调用对应的api。
8.根据权利要求1所述的一种基于java注解实现的elasticsearch检索方法,其特征在于,步骤5包括以下操作:步骤51、提取elasticsearch的检索结果返回的hits数组;步骤52、遍历hits数组;步骤53、将每一个hits数组元素序列化为json数据,再将json数据解析为java对象b。