Redis JSON中FT.SEARCH查询空masterId的语法问题咨询
Redis查询TEXT类型空字符串字段的正确方法
问题原因
RediSearch对TEXT类型字段的空字符串,默认会跳过索引(因为分词、词干提取等处理后,空字符串无法生成有效索引条目),所以直接用@masterId:""这类基于索引的查询会返回0结果。而FT.AGGREGATE能查到空值分组,是因为它会遍历所有文档,不受索引是否存在的影响。
正确查询方式
方式1:使用FILTER子句直接匹配字段值(推荐)
通过FILTER条件直接校验文档中masterId的实际值,无需依赖索引:
FT.SEARCH Results '*' FILTER "@masterId == ''" LIMIT 0 1000
这里*匹配所有文档,再筛选出masterId为空字符串的记录。
方式2:调整索引规则(适合频繁查询空值场景)
创建索引时给masterId字段添加NOSTEM(禁用词干提取)和CASESENSITIVE(大小写敏感)参数,确保空字符串被纳入索引:
FT.CREATE Results ON JSON SCHEMA $.a AS masterId TEXT NOSTEM CASESENSITIVE $.b AS value numeric ...
索引创建完成后,即可用常规语法查询空值:
FT.SEARCH Results @masterId:"" LIMIT 0 1000
内容的提问来源于stack exchange,提问作者Lovethenakedgun
相关产品推荐
相关产品推荐

