用例非常简单。
假设我有一个名为“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。这就是我能想到的实际工作,但这是可取的吗?