Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I search strings in redis?

Tags:

redis

I want an autocomplete feature. I have short descriptive strings on a property of a data type. I have a list of ids in redis for the datatype ordered by created date and I use the ids to set and get properties for the datatype as explained in the redis type documentation. I don't use hash tables. What's the best way to get a set of strings matching what's been typed into an autocomplete input box given this setup? Going through all ids and checking the property I want to search - for each keystroke seems like the wrong way to do this.

EDIT: In addition to the answers below, I've been shown this:

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

like image 494
Bjorn Avatar asked Jun 19 '11 07:06

Bjorn


2 Answers

You need to set up an index using sets or sorted sets that you write to when you save anything.

There's a good writeup at http://web.archive.org/web/20121013063245/http://playnice.ly/blog/2010/05/05/a-fast-fuzzy-full-text-index-using-redis that is pretty close to what I use myself.

like image 84
Tom Clarkson Avatar answered Sep 28 '22 00:09

Tom Clarkson


In Redis, there is no way to search the value of a key. The only way you can "find" a string, is via the keys command. The only downside is that it searches the key names, not the value. The way you can get around this is by having your search string as the key and then have the value of said key your ID. I use an autocompleate function on my side, and I use another database that just contains search strings with have an ID as a value.

like image 41
Colum Avatar answered Sep 28 '22 00:09

Colum