2012-02-19 13 views
5

Digamos que tengo un conjunto de ciudades en el mundo, así:¿Puede Redis hacer la coincidencia de prefijo?

EUKLOND 
EUKMANC 
EUKEDIN 
EITROME 
EITMILA 
EITNAPE 
EFRPARI 
EFRAVIG 
EFRBRES 

Cuando la primera letra es el continente, dos siguientes son el país y 4 de salida son un nombre de la ciudad abreviada.

Me gustaría poder buscar este conjunto pasando "E" que devolvería todas las entradas o EIT y recuperaría todas las entradas para Italia o EFRPARI y obtendría solo la entrada de París.

¿Esto es algo que puedo hacer con Redis?

Respuesta

11

En general, es un escenario de Autocompletar.

Salvatore Sanfilippo (@Antirez), autor de Redis, escribió thorough blog post acerca de cómo lograr esto.

ACTUALIZACIÓN: acabo de ver otra gran blog post, que primero toma la solución de Salvatore y lo explica de forma clara, y la segunda ofrece otra solución que es bueno también para las frases de varias palabras.

+0

Gracias Ofer, he leído este artículo pero parece que no puedo entender cómo llega el autor: "zrange zset 6 -1". ¿Cómo sabe él que tiene que hacer un corte de 6 a 1? Si tengo un número variable de ciudades en un país europeo, ¿cómo calculo X en "zrange zset X -1"? – jdoig

+0

Primero, preguntó dónde se encuentra 'fo' ejecutando' zrank zset fo'. Él obtuvo la respuesta '5'. Luego, preguntó para obtener todos los artículos desde 6 (5 + 1) hasta el final. Él corre 'zrange zset 6 -1'. Cuando usas números negativos, significa 'desde el final'. -1 significa 'último elemento del conjunto ordenado' (ver [documentación de redis] (http://redis.io/commands/zrange)). –

+0

Sí, esto es lo que asumí. El de "fo" al "final de la lista" no es una forma viable de hacer esto. El conjunto de datos anterior era solo un ejemplo. Realmente no puedo permitirme regresar de un punto arbitrario hasta el final del conjunto, ya que es potencialmente una enorme cantidad de datos (los conjuntos pueden contener ~ 4 mil millones de elementos de IRC). – jdoig

Cuestiones relacionadas