用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法技术

技术编号:21453880 阅读:25 留言:0更新日期:2019-06-26 04:45
本发明专利技术涉及一种用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法,涉及数据结构技术领域。本发明专利技术能够高效准确地将复杂的异形树形数据结构转换为简单易用的数组型数据结构,此方法解决了ES聚合结果复杂难以解析的问题,一定程度上满足不限级聚合结果的转换需要。

【技术实现步骤摘要】
用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法
本专利技术涉及数据结构
,具体涉及一种用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法。
技术介绍
随着云时代的来临,大数据也吸引了越来越多的关注。大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据。适用于大数据的技术,包括大规模并行处理(MPP)数据库、数据挖掘电网、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。ElasticSearch是一个基于Lucene的搜索服务器,设计用于云计算中,能够达到实时搜索、稳定、可靠、快速,使用方便的目的。如要建立一个网站或应用程序,并要实现搜索和统计的相关功能,而ElasticSearch统计数据时默认返回的Aggregations数据结构是非常复杂的,不利于开发时使用。因此需要解决此种复杂数据结构在开发中带来的难以解析使用的问题。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是:如何解决ES聚合结果复杂难以解析的问题。(二)技术方案为了解决上述技术问题,本专利技术提供了一种用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法,包括以下步骤:步骤一、获取ElasticSearch聚合的结果;步骤二、转换结果数据,步骤三、数据汇总;步骤一中获取ElasticSearch聚合的结果时,使用Es聚合运算API与查询API相结合的方法;步骤二的转换结果数据分为三个子步骤:转换结果集为JSON、递归取值、数据转换;步骤三是将步骤二得到的数据结构的最终数据用于数据汇总。优选地,步骤一具体包括以下步骤:1.创建Es查询SearchRequestBuildersrb:srb创建方法为TransportClient.prepareSearch(索引名称).setTypes(索引类型)2.创建过滤条件QueryBuilderqbqb创建方法为QueryBuilders.termsQuery(参数名,参数值)3.创建聚合TermsAggregationBuildertAggb创建字段f1所对应的聚合agg1,并命名为"f1_count",方法为:AggregationBuilders.terms("f1_count").field("f1.raw"),以同样的方法创建字段f2、f3所对应的聚合agg2、agg3,并分别命名为"f2_count"、"f3_count";tAggb创建方法为:tAggb=agg1.subAggregation(agg2.subAggregation(agg3));subAggregation表示聚合关系;4.添加过滤和聚合在查询时加入过滤和聚合约束:srb.setQuery(qb).addAggregation(tAggb);SearchResponsesr=srb.execute().actionGet()。优选地,步骤二中将结果集转换为JSON具体为:ElasticSearch聚合的结果集为不规则的树形结果,每不同层根节点名称都互不相同,但每相同层间根节点的名称相同,给ES每一层的聚合结果起名的时候使用当前聚合字段名+"_count",为:f1_count,f2_count,f3_count,采用com.alibaba.fastjson的API将聚合结果SearchResponse转换为JSONObject并取出aggregations对象,得到json格式的待转换数据aggs。优选地,步骤二中递归取值过程中,已知条件为:待转换数据,JSON格式的aggs聚合字段,为f1、f2、f3递归取值过程使用java语言实现的方法如下:使用一个变量level作为类指针使用,同时记录当前层数与当前层数变量名的作用,方法参数分别为(JSONObjectaggs,String[]fields,Integerlevel,Stringkeys,Map<String,String>rst),依次代表:提取和转换数据类型的聚合结果aggs;已定义的聚合字段fields,为:newString[]{"f1","f2","f3"};层级level,为Integer类型,本身含义为层数,也用做fs[level]即每一层的变量名f1或f2或f3或fn;每次遍历结果Map的key,keys格式为v1;;v2;;v3的字符串,分别是f1_count,f2_count,f3_count对应对象的"key"的值;用来存储结果的Map;递归对象选取,实际最终结果的值都存放在f1_count,f2_count,f3_count的buckets数组对象中,故第一步需要确定此数组对象的变量:JSONArraybuckets=aggs.getJSONObject(fields[level]+"_count").getJSONArray("buckets");判断level是否变化,由于level表示层数,在代码中特殊处理level的值:若buckets不为null或level的值未超过fields的长度,则表示此次递归可正常进行,循环取出此时buckets数组中每个元素对应的对象的key值,判断key不为null且层数未达到最大层数,则进行递归,递归前将层数增大则下次即进入下一层的buckets;若buckets为空或level的值超过fields的长度,则不进行递归下一层,此次递归需要将level值返回,以便下次递归使用,此时存在另一种情况:若递归正常开始,则满足若buckets为空或level的值超过fields的长度时,代表本次已完成第一次完整遍历,此时控制level的值回退至上一层;参数传递,由于每次遍历需要把每一层的buckets的每一个"key"对应的值传递至最后,所以条件满足递归前,将当前"key"对应的值与上一层的值拼接为一个新的值:keys+key+";;"以;;为分割的一个字符串,若考虑到拼接字符串时对象新建带来的资源消耗问题,将此处Stringkeys换成StringBufferkeys,当keys传递到最后一层,即树形结构的叶子节点处,需将此时keys作为Map的key值此时buckets某元素的doc_count对应值作为Map的value值,将这个结果保存在Map中,当递归完成时,所有所需结果已存储在Map中。优选地,步骤二中进行数据转换时将Map转换为JSONArray,递归完成的结果Map存储的数据为一个中间结果,将其再次转换成为易使用的数据类型。优选地,步骤二中进行数据转换时将Map转换为JSONArray具体方法为:遍历Map所有key-value,key值以";;"符号分割为与fs数组长度相等的字符串数组,则此时数组下标相同的即为一对值,至此所有结果转换完成。优选地,所述数据汇总的形式为报表汇总。优选地,所述报表汇总的形式为表格。优选地,所述报表汇总的形式为柱状图或折线图。(三)有益效果本专利技术能够高效准确地将复杂的异形树形数据结构转换为简单易用的数组型数据结构,此方法解决了ES聚合结果复杂难以解析的问题,一定程度上满足不限级聚合结果的转换需要。附图说明图1为本专利技术的转换过程中本文档来自技高网...

【技术保护点】
1.一种用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法,其特征在于,包括以下步骤:步骤一、获取ElasticSearch聚合的结果;步骤二、转换结果数据,步骤三、数据汇总;步骤一中获取ElasticSearch聚合的结果时,使用Es聚合运算API与查询API相结合的方法;步骤二的转换结果数据分为三个子步骤:转换结果集为JSON、递归取值、数据转换;步骤三是将步骤二得到的数据结构的最终数据用于数据汇总。

【技术特征摘要】
1.一种用于数据汇总的基于ElasticSearch聚合运算结果的数据结构转换方法,其特征在于,包括以下步骤:步骤一、获取ElasticSearch聚合的结果;步骤二、转换结果数据,步骤三、数据汇总;步骤一中获取ElasticSearch聚合的结果时,使用Es聚合运算API与查询API相结合的方法;步骤二的转换结果数据分为三个子步骤:转换结果集为JSON、递归取值、数据转换;步骤三是将步骤二得到的数据结构的最终数据用于数据汇总。2.如权利要求1所述的方法,其特征在于,步骤一具体包括以下步骤:1.创建Es查询SearchRequestBuildersrb:srb创建方法为TransportClient.prepareSearch(索引名称).setTypes(索引类型)2.创建过滤条件QueryBuilderqbqb创建方法为QueryBuilders.termsQuery(参数名,参数值)3.创建聚合TermsAggregationBuildertAggb创建字段f1所对应的聚合agg1,并命名为"f1_count",方法为:AggregationBuilders.terms("f1_count").field("f1.raw"),以同样的方法创建字段f2、f3所对应的聚合agg2、agg3,并分别命名为"f2_count"、"f3_count";tAggb创建方法为:tAggb=agg1.subAggregation(agg2.subAggregation(agg3));subAggregation表示聚合关系;4.添加过滤和聚合在查询时加入过滤和聚合约束:srb.setQuery(qb).addAggregation(tAggb);SearchResponsesr=srb.execute().actionGet()。3.如权利要求2所述的方法,其特征在于,步骤二中将结果集转换为JSON具体为:ElasticSearch聚合的结果集为不规则的树形结果,每不同层根节点名称都互不相同,但每相同层间根节点的名称相同,给ES每一层的聚合结果起名的时候使用当前聚合字段名+"_count",为:f1_count,f2_count,f3_count,采用com.alibaba.fastjson的API将聚合结果SearchResponse转换为JSONObject并取出aggregations对象,得到json格式的待转换数据aggs。4.如权利要求3所述的方法,其特征在于,步骤二中递归取值过程中,已知条件为:(a)待转换数据,JSON格式的aggs(b)聚合字段,为f1、f2、f3递归取值过程使用java语言实现的方法如下:(1)使用一个变量level作为类指针使用,同时记录当前层数与当前层数变量名的作用,方法参数分别为(JSONObjectaggs,String[]fields,Integerlevel,Stringkeys,Map<String,String>rst),依次代表:①提取和转换数据类型的聚合结果aggs;②已定义...

【专利技术属性】
技术研发人员:胡佳石波李志强谢小明丁卫星徐晶刘建道
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1