You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用RedisJson和RedisSearch按数组属性长度过滤对象?

用RedisJSON和RedisSearch筛选数组长度符合条件的对象

要实现按users数组长度筛选的需求,需要结合RedisJSON的JSONPath能力和RedisSearch的索引查询功能,步骤如下:

1. 创建RedisSearch索引

首先需要为JSON键创建索引,将users数组的长度提取为可查询的数值字段。假设你的JSON键都带有统一前缀(比如user:),执行以下命令创建索引:

FT.CREATE user_list_idx ON JSON PREFIX 1 "user:" SCHEMA $.users.length() AS user_count NUMERIC
  • user_list_idx:自定义的索引名称,可根据实际修改
  • PREFIX 1 "user:":指定只索引前缀为user:的键,需替换为你实际的键前缀
  • $.users.length():通过JSONPath获取users数组的长度
  • AS user_count NUMERIC:将数组长度映射为名为user_count的数值类型字段,用于后续范围查询

2. 执行筛选查询

基于创建好的索引,即可通过FT.SEARCH命令实现不同条件的筛选:

筛选users.length > X的对象(例如X=10)

FT.SEARCH user_list_idx "@user_count:[11 +inf]" RETURN 1 "$"
  • [11 +inf]:表示数值大于10的范围(+inf代表正无穷)
  • RETURN 1 "$":指定返回完整的JSON对象;若只需返回键名,可改为RETURN 0

筛选users.length < X的对象(例如X=5)

FT.SEARCH user_list_idx "@user_count:[-inf 4]" RETURN 1 "$"

筛选users.length = X的对象(例如X=3)

FT.SEARCH user_list_idx "@user_count:[3 3]" RETURN 1 "$"

筛选users.length >= X或users.length <= X的对象

  • 大于等于X:FT.SEARCH user_list_idx "@user_count:[X +inf]" RETURN 1 "$"
  • 小于等于X:FT.SEARCH user_list_idx "@user_count:[-inf X]" RETURN 1 "$"

注意事项

  • 若你的JSON键没有统一前缀,可调整PREFIX参数(比如PREFIX 0表示索引所有JSON键,但不推荐,会影响性能)
  • 索引创建后,新添加的符合前缀的JSON键会自动被索引;若要索引已存在的键,可执行FT.ALTER user_list_idx ADD SCHEMA ...后,用FT.REINDEX重新索引现有键
  • 确保Redis服务器已安装并启用RedisJSON和RedisSearch模块

内容的提问来源于stack exchange,提问作者Yaniv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:47:09