ZRANGEBYLEX支持包含查询吗?

时间:2015-11-17 01:37:16

标签: redis

如何查询排序集以获取包含某些字符的所有键?

"以"开头工作正常,但我需要"包含"。 我正在使用以下查询"以"开头哪个工作正常

zrangebylex zset [2110 "[2110\xff" LIMIT 0 10

我们有什么方法可以做\ xff query \ xff?

3 个答案:

答案 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修补。