聚合
聚合基于Query结果的统计,执行过程是搜索的一部分,Onesearch支持0代码构建聚合,聚合目前完全在引擎层
0代码聚合
上图是聚合的配置,包括2个pdm文档聚合统计
- termsOfExt
term桶聚合,统计ext,如,pdf,doc的数量;子聚合,term下sum文档的大小
- rangeOfSize
统计3种大小范围的文件数量
构建聚合
构建agg在引擎层,aggSchema是上面xml对应的类,aggBlockMapping agg块映射,解释AggScheam映射为对应的Aggregation,设计与Query一致,block mapping映射块,如,query,highlight,agg,装配组装成完整搜索对象,关于装配映射引擎参考:
再见esdsl,搜索引擎 elasticsearch通用表达式搜索(附源码)_es表达式检索引擎-CSDN博客
每类agg对应的agg mapping,解释agg schema构建Aggregation对象
上图是term 聚合的映射,bucket agg可带子agg
searchObject.aggregations(aggs) 最后设置到搜索对象
聚合结果
上面搜索结果介绍过,聚合结果也在SearchResponse返回
下图处理agg结果的逻辑
根据agg schema的agg item的key,获取聚合结果Aggregate
Agg item负责从Aggregate获取集合统计值,上图是term bucket统计的获取,bucket类型的agg支持子聚合;metrics类型没有子聚合
搜索展示
本节综合展示搜索结果,包括搜索词,filter,nested,聚合,搜索使用场景的pdm-document
Nested搜索
测试代码
最上层api测试,贴近实际使用,不带agg,结果如下图
带聚合搜索
测试代码,api层
搜索词:"组织架构",filter,带agg,返回如下
搜索部分,em是高亮
聚合部分
至此,本系列文章完毕