如何让redis.call执行FT.SEARCH时LIMIT参数不被引号包裹?
解决ioredis中FT.SEARCH的LIMIT参数被引号包裹的问题
核心问题
你遇到的问题是ioredis把LIMIT 10 30当成单个字符串参数传递,Redis会将其识别为查询条件的一部分,而非合法的分页命令选项,导致指令失效。
正确调用方式
使用ioredis时,必须将FT.SEARCH的每个参数(包括LIMIT、偏移量、数量)拆分为数组的独立元素,不能合并成一个字符串:
// 正确写法 redis.call('FT.SEARCH', 'idx:tasks', '@labels:{619f668a333141a9d9a078e3 | 619f668a333141a9d9a078c8}', 'LIMIT', 10, 30 );
这样生成的Redis命令会是符合要求的结构,每个参数独立,不会被引号包裹成整体:
FT.SEARCH idx:tasks "@labels:{619f668a333141a9d9a078e3 | 619f668a333141a9d9a078c8}" LIMIT 10 30
为什么合并到查询字符串无效
LIMIT是FT.SEARCH的命令选项参数,不属于查询表达式的范畴。强行把LIMIT 10 30并入查询字符串,Redis会将其当作查询条件的一部分解析,自然无法识别为分页指令。
内容的提问来源于stack exchange,提问作者localhost443
相关产品推荐
相关产品推荐

