我正在使用Redis开发按需搜索功能。我需要的搜索类型是“ 包括”类型搜索,而不是是“ 以开头”类型搜索。我已经知道ZRANGEBYLEX非常适合“ 以开头”搜索,但无法满足我的需求。例如,如果用户键入“ a”,他们将看到“ A lly”,“ a vril”,“ D a ve”和“ Lind a ”。如果他们键入“ av”,他们将看到“ av ril”和“ D av e”。搜索还必须不区分大小写,并返回N个结果,按字母顺序排序。
- 对于这种类型的搜索,是否有任何方法可以克服线性时间?
- 如果没有,您是否看到优化以下线性时间算法的任何方法?
要存储:
- 创建一个名为“用户”的设置键
- 对于每个用户,请添加“用户”,“ {小写用户名}:{原始用户名}”
要搜索:
- 运行SCARD以获取集合的大小
- 在小写搜索词上使用MATCH运行单个SSCAN(并指定比SCARD大的COUNT)以获取所有匹配项
- 从匹配的每个条目中删除小写的用户名
- 按字母顺序对结果进行排序
- 返回前N个结果
一些其他注意事项: 用户数上限为20,000。这就是为什么我只用光标做一个SSCAN而不循环播放的原因。
谢谢!