我想要一个自动完成功能。我有简短的描述性字符串 数据类型的属性。我在redis中有一个id列表 按创建日期排序的数据类型,我使用ids来设置和获取 redis类型中解释的数据类型的属性 文档。我不使用哈希表。什么是最好的方式来获得 匹配已输入自动完成输入的字符串集 给出这个设置的盒子?浏览所有ID并检查属性 我想搜索 - 因为每次击键似乎都是错误的做法 这个。
修改 除了下面的答案,我已经看到了这个:
答案 0 :(得分:10)
您需要使用在保存任何内容时写入的集或排序集来设置索引。
在http://web.archive.org/web/20121013063245/http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis有一个很好的写作,与我自己使用的非常接近。
答案 1 :(得分:4)
在Redis中,无法搜索密钥的值。您可以“查找”字符串的唯一方法是通过keys
命令。唯一的缺点是它搜索键名,而不是值。解决这个问题的方法是将搜索字符串作为密钥,然后将所述密钥的值作为您的ID。我在我这边使用自动复制功能,我使用另一个只包含ID作为值的搜索字符串的数据库。
答案 2 :(得分:0)
Redis本身不支持它。我们修改了Redis的源代码,使其可以支持全文本搜索,字符串搜索以及一些求和和平均值的计算。
项目主页:http://oncedb.com
OnceDB支持直接搜索,支持诸如String和Hash之类的对象,
使用SEARCH命令
# Create data
set test1 'this is testing'
> OK
set test2 'this is article'
> OK
# Search data
search test* ~ article
1) test1
2) this is testing
3) test2
4) this is article
操作员支持:
= Exact match
~ Partial match
> >= < <= Compare match
使用hsearch命令
redis中没有“表”的概念。通常,使用schema:id的键名包括表名和主键。例如,user:001是具有用户表和主键值001的哈希对象。
# Create hash data
hmset user:001 name kris email c2u@live.cn gender male age 16
> OK
hmset user:002 name sunny age 24
> OK
# Search hash data
hsearch user:* age > 18 name = *
1) user:002
2) 24
3) sunny
直接使用test:*或user:*模式匹配,因为它将遍历所有键,并且性能低下。 zhsearch可以在有序列表中搜索相应的主键,并指定搜索范围。
在上面的示例中,我们将用户的主键值存储到*用户排序的列表中,分数是大约时间的整数
zadd *user 20020201 001 20020202 002
搜索第一个匹配数据(从0到0)
zhsearch *user 0 0 user: age > 10
1) -1
2) user:001
3) 16
使用全文本搜索时,返回的第一个参数始终为-1。
OnceDB不会更改Redis的数据存储结构。 Redis数据库文件可以在OneDB中直接操作,然后返回给Redis使用。
全文搜索的性能很差。您可以通过创建索引来提高性能。
OnceDB可以选择在修改数据后自动创建辅助索引。
详细信息可以参考此答案
答案 3 :(得分:0)
你可以试试RediSearch。
它是一个Redis模块,提供Redis的查询、二级索引和全文搜索。
它使用压缩的倒排索引以低内存占用实现快速索引。
它的索引通过提供精确短语匹配、模糊搜索和数字过滤以及许多其他功能来增强 Redis。