RediSearch百万级键全库聚合异常问题咨询
RediSearch全库聚合查询异常问题分析与解决
问题原因
当执行无过滤条件的全库聚合时,FT.AGGREGATE会先返回所有分组的总数量(即你看到的(integer) 65799),而非直接返回排序后的TOP10结果。这是因为全库聚合涉及的分组数较多(远超过带时间过滤的场景),RediSearch无法一次性完成所有分组的统计、排序并返回结果,默认会先输出分组总数,后续结果需要通过游标机制分批获取。
而带时间范围过滤的查询因为数据量小、分组数少,RediSearch可以一次性完成计算,直接返回排序后的结果集,不会触发游标机制。
解决方法
要获取全库聚合的TOP10结果,需要在查询中加入CURSOR参数,通过游标分批获取结果:
FT.AGGREGATE myIndex '*' GROUPBY 1 @name REDUCE COUNT 0 AS count SORTBY 2 @count DESC MAX 10 CURSOR 0
执行上述命令后,会返回一个游标ID和第一批结果(即你需要的TOP10)。如果还有更多结果,后续可以通过CURSOR <返回的游标ID>继续获取,直到游标返回0表示所有结果已获取完毕。
内容的提问来源于stack exchange,提问作者Alexus
相关产品推荐
相关产品推荐

