RediSearch FT.AGGREGATE为何将条目归入错误分组?
问题分析与解决
核心问题:LOAD参数格式错误
你的FT.AGGREGATE命令中,LOAD后的数字6是错误的。LOAD命令里指定的数字代表后续要加载的字段数量,你实际只加载了questions和answers两个字段,因此应该写LOAD 2,或者直接省略该数字(Redis会自动识别字段数量)。
错误的数字导致Redis解析字段时出现异常,进而让@questions和@answers的取值不符合预期,最终引发分组错误。
修正后的查询命令
FT.AGGREGATE mySearch @answeredBy:{John} LOAD 2 $.results[*].question AS questions $.results[*].answer AS answers GROUPBY 2 @questions @answers REDUCE COUNT 0 AS numAnswers DIALECT 4
或者省略数字:
FT.AGGREGATE mySearch @answeredBy:{John} LOAD $.results[*].question AS questions $.results[*].answer AS answers GROUPBY 2 @questions @answers REDUCE COUNT 0 AS numAnswers DIALECT 4
额外说明:若需统计单个问答对的出现次数
如果你的真实需求是统计John回答过的每个问答对的总次数(比如「Who is a composer? -> Bach」出现2次,「Who is an athlete? -> Tiger Woods」出现1次),需要用UNWIND展开数组,而非直接加载整个数组:
FT.AGGREGATE mySearch @answeredBy:{John} LOAD $.results AS results UNWIND @results AS result LOAD $.result.question AS question $.result.answer AS answer GROUPBY 2 @question @answer REDUCE COUNT 0 AS numAnswers DIALECT 4
该命令会把每个文档中的results数组拆分成单个问答对象,再按问答对分组计数,得到精准的统计结果。
内容的提问来源于stack exchange,提问作者goose_lake
相关产品推荐
相关产品推荐

