如何查询排序集以获取包含某些字符的所有键?
"以"开头工作正常,但我需要"包含"。 我正在使用以下查询"以"开头哪个工作正常
zrangebylex zset [2110 "[2110\xff" LIMIT 0 10
我们有什么方法可以做\ xff query \ xff?
答案 0 :(得分:3)
没有。 Redis'排序集的词典范围只能用于前缀搜索。
请注意,通过使用另一个存储值反转的排序集,您还可以对值执行后缀搜索。但是,即使将这两种方法结合起来也无法提供所需的功能。
或者,您可以执行前缀搜索,然后使用Lua脚本过滤结果。根据您的查询和数据,这可能是也可能不是一种有效的方法。
你也可以考虑在Redis之上实现一个全文索引机制,但在大多数情况下这将是一种矫枉过正,此外,现有的测试技术已经做到了。
答案 1 :(得分:1)
但是你可以使用带有glob样式模式的ZSCAN,例如获取包含字符“ s ”和/或“ a 的所有字符串“:
ZSCAN key 0 MATCH *[sa]*
答案 2 :(得分:0)
从ZRANGEBYLEX原始文档(也在source code中查看zzlCompareElements
函数实现):
使用memcmp()C函数逐字节比较,认为元素从低字符串到高字符串排序。如果公共部分相同,则认为较长的字符串大于较短的字符串。
来自memcmp documentation:
memcmp
将ptr1指向的内存块的第一个num字节与ptr2指向的第一个num字节进行比较,如果它们全部匹配则返回零,或者如果不匹配则返回0表示如果不匹配则返回0
因此,您无法将zrangebylex
与包含查询一起使用。而且我担心没有任何“精简”的解决方法。 “Lite” - 没有redis sourfce修补。