如何在redis中搜索字符串?

时间:2011-06-19 07:41:30

标签: redis

我想要一个自动完成功能。我有简短的描述性字符串 数据类型的属性。我在redis中有一个id列表 按创建日期排序的数据类型,我使用ids来设置和获取 redis类型中解释的数据类型的属性 文档。我不使用哈希表。什么是最好的方式来获得 匹配已输入自动完成输入的字符串集 给出这个设置的盒子?浏览所有ID并检查属性 我想搜索 - 因为每次击键似乎都是错误的做法 这个。

修改 除了下面的答案,我已经看到了这个:

http://antirez.com/post/autocomplete-with-redis.html

4 个答案:

答案 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模式字段运算符的值...

使用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

搜索有序列表(zset):zhsearch键从到模式字段运算符值...

直接使用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可以选择在修改数据后自动创建辅助索引。

详细信息可以参考此答案

Redis and Querying Values

答案 3 :(得分:0)

你可以试试RediSearch
它是一个Redis模块,提供Redis的查询、二级索引和全文搜索。

它使用压缩的倒排索引以低内存占用实现快速索引。
它的索引通过提供精确短语匹配、模糊搜索和数字过滤以及许多其他功能来增强 Redis。

redisearch-stars