Redis聚合时如何使用APPLY format()处理加载的JSON值?
解决RedisSearch聚合APPLY中JSONPath引用的Unknown symbol错误
问题根源
你遇到的Unknown symbol 'color'错误,是因为RedisSearch在解析聚合表达式时,会把@$.color里的.视为符号分隔符,将其拆分为@$和color两个部分,导致无法识别color这个未定义的符号。
两种可行解决方案
方案1:LOAD时给JSONPath指定别名(推荐)
在LOAD阶段直接为每个JSONPath字段设置别名,后续在APPLY和GROUPBY中用别名引用,彻底避免特殊字符解析问题:
FT.AGGREGATE shapeSearch "@shape:{circle}" \ LOAD 2 $.color AS color $.material AS material \ APPLY "format(\"%s %s\", @color, @material)" AS colorAndMaterial \ GROUPBY 1 @shape \ REDUCE TOLIST 1 @colorAndMaterial
方案2:用反引号包裹含特殊字符的字段名
如果不想设置别名,可以用反引号将包含.的JSONPath字段名包裹起来,告诉RedisSearch这是一个完整的字段标识:
FT.AGGREGATE shapeSearch "@shape:{circle}" \ LOAD 2 $.color $.material \ APPLY "format(\"%s %s\", @`$.color`, @`$.material`)" AS colorAndMaterial \ GROUPBY 1 @shape \ REDUCE TOLIST 1 @colorAndMaterial
补充说明
- 两种方案都能正确将
color和material的值拼接成"blue metal"这类格式,最终通过TOLIST聚合为对应形状的组合列表。 - 推荐使用方案1,因为别名让命令更易读、更易维护,后续修改字段时也更方便。
内容的提问来源于stack exchange,提问作者goose_lake
相关产品推荐
相关产品推荐

