Redis Sorted Set ZSCAN临时设置 - 一个好主意?

时间:2014-12-06 11:57:42

标签: redis sortedset

用例非常简单。

假设我有一个名为“Employee”的zSet,其值为

zAdd Employee 1000 "Eric Anderson"
zAdd Employee 1200 "Eric Henderson"
zAdd Employee 1400 "Eric Johnson"
zAdd Employee 1500 "Jackie Johnson"
zAdd Employee 1600 "John Ericson"

所以基本上,如果我想为系统用户提供一个函数来为员工通配符搜索,显示按分数排序的结果(从最高到最低),我可以用ZSCAN解决这个问题吗? ?

我想做的是这样的事情

ZSCAN Employee MATCH "*ohn*" LIMIT 0, 20

并获得如此结果集

John Ericson, 1600
Jackie Johnson, 1500
Eric Johnson, 1400

留下其他两个,因为它们与搜索短语“ohn”不匹配。

换句话说,这是BASIC搜索功能。一个你可以比喻的

SELECT * FROM Employee WHERE name LIKE "%ohn%" ORDER BY salary

在上面的选择中,薪水显然是得分值。使用LIKE和%%的上述查询显然是不可取的,因为它不会使用索引,因此会将文件排序。

请建议。

编辑:我忘了添加一个建议的解决方案,你执行一个常规的ZSCAN,它可以获得与搜索短语匹配的所有值,无论我用什么顺序找不到,然后将它们放在新的zSET中并执行zREVRANGE它,获取结果,然后删除该zSet。这就是我能想到的实际工作,但这是可取的吗?

0 个答案:

没有答案