Redis
 sql >> Database >  >> NoSQL >> Redis

Indicizzazione utilizzando i set ordinati Redis

  1. Sconsiglio vivamente l'uso di Redis per questo. Memorizzerai un sacco di dati di puntatore extra e, se mai decidessi di voler eseguire query più complicate come SELECT WHERE first_name LIKE 'jon%' ti metterai nei guai. Dovrai anche progettare indici extra molto grandi che attraversano più colonne, nel caso in cui desideri cercare due campi contemporaneamente. Dovrai essenzialmente continuare a hackerare e riprogettare un framework di ricerca. Faresti molto meglio usando Elastic Search o Solr, o uno qualsiasi degli altri framework già creati per fare quello che stai cercando di fare. Redis è fantastico e ha molti buoni usi. Questo non è uno di questi.

  2. Avvertimento a parte, per rispondere alla tua vera domanda:penso che sarebbe meglio servirti utilizzando una variante della tua prima soluzione. Usa un unico set ordinato per indice, ma converti semplicemente le tue lettere in numeri. Converti le tue lettere in un valore decimale. Puoi utilizzare il valore ASCII o semplicemente assegnare a ciascuna lettera un valore da 1 a 26 in ordine lessicografico, supponendo che tu stia utilizzando l'inglese. Standardizza, in modo che ogni lettera occupi la stessa lunghezza numerica (quindi, se 26 è il tuo numero più grande, 1 sarebbe scritto "01"). Quindi aggiungili insieme con un punto decimale davanti e usalo come punteggio per indice (cioè "cappello" sarebbe ".080120"). Ciò ti consentirà di avere una mappatura 1-a-1 correttamente ordinata tra le parole e questi numeri. Quando esegui la ricerca, converti da lettere a numeri, quindi sarai in grado di utilizzare tutte le belle funzioni di set ordinate di Redis come ZRANGEBYSCORE senza bisogno di riscriverli. Le funzioni di Redis sono scritte in modo molto, molto ottimale, quindi è molto meglio usarle quando possibile invece di scriverne di proprie.