一种es聚合查询方法技术

技术编号:33120704 阅读:10 留言:0更新日期:2022-04-17 00:19
本发明专利技术提供一种es聚合查询方法,包括:依据查询请求的数量生成查询相同数量的查询线程;对各查询线程的请求划分为新闻类和社交类;通过术语聚合生成器和布尔查询器导入搜索请求生成器获得查询结果;通过查询结果获得内部多桶聚合;遍历内部多桶聚合,将每个bucket的key转换为新的键值;将新的键值与查询结果整合获得最终查询结果。通过将媒体进行细分,避免了在使用es原生聚合查询时可能会出现重叠和错误,并解决了在应用中相应字段出现的格式不一致问题。式不一致问题。式不一致问题。

【技术实现步骤摘要】
一种es聚合查询方法


[0001]本专利技术属于数据查询,具体涉及一种es聚合查询方法。

技术介绍

[0002]Elasticsearch作为一个运用广泛的中间件,本身集成了许多查询方式,包括给查询的相应字段进行权重加成和聚合查询等,所以在实际应用中可以通过泛型的方式,直接传入一些参数到模版中,在生成相应的查询生成器之后直接运用到业务里面。但在实际使用中,由于封装数据的字段格式不一致,会导致查询失败或是查询结果不准确。

技术实现思路

[0003]本专利技术提供一种避免在使用es原生聚合查询时可能会出现重叠和错误的es聚合查询方法。
[0004]一种es聚合查询方法,包括以下步骤:依据查询请求的数量生成查询相同数量的查询线程;对各查询线程的请求划分为新闻类和社交类;对各查询线程的请求中查询条件分别生成布尔查询器,通过索引生成搜索请求生成器,通过自定义字段和查询请求时间的生成对应的子聚合,将子聚合放入术语聚合生成器;将术语聚合生成器和布尔查询器导入搜索请求生成器获得查询结果;通过查询结果中的自定义字段获得内部多桶聚合;遍历内部多桶聚合,得到组成这个聚合的每个bucket的key转换成字符串,依据字符串得到内部日期直方图的聚合;重复遍历将每个bucket的key转换为新的键值;所属键值为每个单体的文档计数;将新的键值与查询整合获得最终查询结果。
[0005]进一步的,步骤e中的key值通过聚合中各bucket的list集合获得。
[0006]进一步的,索引包括请求时间、媒体类型、情感参数。
[0007]进一步的,请求时间为年月日纯数据。
[0008]进一步的,媒体类型的数据类型为小写英文字母。
[0009]综上所述,由于采用了上述技术方案,本专利技术的有益效果是:通过将媒体进行细分,避免了在使用es原生聚合查询时可能会出现重叠和错误,并解决了在应用中相应字段出现的格式不一致问题。
附图说明
[0010]图1为本专利技术流程图。
具体实施方式
[0011]如图1,一种es聚合查询方法,包括以下步骤:依据查询请求的数量生成查询相同数量的查询线程;
[0012]对各查询线程的请求划分为新闻类和社交类;
[0013]获取各查询请求中时间字段的end和start将其转换为LocalDate时间格式,比较
end 和start的时间顺序,将end和start中较早的时间作为在先时间并与请求封装为set集合,完成去重和批处理,并将在先时间增加一个月;
[0014]获取请求中country(新闻定义类),sentiment(情感参数)、source(自定义字段)、 pubtime(在先时间)的字段分别通过QueryBuilders.boolQuery()生成自身的布尔查询生成器,以查询到的字段通过ES提供的api方法进行封装为query。
[0015]将set集合转换为string数组,调用es的TransportClient类的prepareSearch方法,将其类型设置成“data”,去构建一个搜索请求生成器SearchRequestBuilder sbuilder。
[0016]当set集合中level字段在枚举LevelType中获取对应的字符为DAILY时,构筑搜索请求生成器聚合时,其日期日期直方图的时间格式为"yyyy

MM

dd",且日期直方图的间隔以天为单位;具体为:
[0017]sbuilder.addAggregation(AggregationBuilders.dateHistogram("data").field(pubtim e).format("yyyy

MM

dd").dateHistogramInterval(DateHistogramInterval.DAY))。
[0018]当set集合中level字段在枚举LevelType中获取对应的字符为HOURLY时,构筑搜索请求生成器聚合时,其日期日期直方图的时间格式为"yyyy

MM

dd HH:00:00",且日期直方图的间隔以小时为单位;具体为:
[0019]sbuilder.addAggregation(AggregationBuilders.dateHistogram("data").field(pubtim e).format("yyyy

MM

ddHH:00:00").dateHistogramInterval(DateHistogramInterval.HO UR))。
[0020]将query封装进搜索请求生成器并进行搜索获得相应的响应结果获得相应的内部多桶聚合。
[0021]从内部多桶聚合获取一个bucket的list集合。
[0022]通过bucket.getKeyAsString()对list集合处理获得字符串date,如传入的参数level 和枚举LevelType中DAILY的code值对应,那么将date的时间格式转换成"yyyy

MM

dd",否则就转换成"yyyy

MM

dd HH:mm:ss"。
[0023]通过bucket.getDocCount()方法得到一个类型为Long的变量num,将date作为key 值,num作为value值存入到Map result中,如果result已经存在相同的date值作为key,那么就将num与通过date得到的value值相加,存入result中。
[0024]遍历对每个单独的bucket完成内部多桶聚合的处理,将result与查询结果整合获得最终查询结果。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种es聚合查询方法,其特征在于,包括以下步骤:a依据查询请求的数量生成查询相同数量的查询线程;b对各查询线程的请求划分为新闻类和社交类;c对各查询线程的请求中查询条件分别生成布尔查询器,通过索引生成搜索请求生成器,通过自定义字段和查询请求时间的生成对应的子聚合,将子聚合放入术语聚合生成器;将术语聚合生成器和布尔查询器导入搜索请求生成器获得查询结果;d通过查询结果获得内部多桶聚合;e遍历内部多桶聚合,得到组成这个聚合的每个bucket的key转换成字符串,依据字符串得到内部日期直方图的聚合;重复遍历将每个buck...

【专利技术属性】
技术研发人员:夏朝高华伟
申请(专利权)人:中译语通科技成都有限公司
类型:发明
国别省市:

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

1