Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Indizierung mit Redis-sortierten Sätzen

  1. Ich rate dringend davon ab, Redis dafür zu verwenden. Sie werden eine Menge zusätzlicher Zeigerdaten speichern, und wenn Sie sich jemals entscheiden, kompliziertere Abfragen wie SELECT WHERE first_name LIKE 'jon%' durchzuführen du wirst in Schwierigkeiten geraten. Sie müssen auch zusätzliche, sehr große Indizes entwickeln, die mehrere Spalten überqueren, falls Sie gleichzeitig nach zwei Feldern suchen möchten. Sie müssen im Wesentlichen weiter hacken und ein Such-Framework überarbeiten. Sie wären viel besser dran, Elastic Search oder Solr oder eines der anderen Frameworks zu verwenden, die bereits gebaut wurden, um das zu tun, was Sie versuchen zu tun. Redis ist großartig und hat viele gute Verwendungsmöglichkeiten. Dies ist keiner von ihnen.

  2. Warnung beiseite, um Ihre eigentliche Frage zu beantworten:Ich denke, Sie wären am besten mit einer Variante Ihrer ersten Lösung bedient. Verwenden Sie einen einzigen sortierten Satz pro Index, aber wandeln Sie einfach Ihre Buchstaben in Zahlen um. Wandeln Sie Ihre Buchstaben in einen Dezimalwert um. Sie können den ASCII-Wert verwenden oder einfach jedem Buchstaben einen Wert von 1 bis 26 in lexikografischer Reihenfolge zuweisen, vorausgesetzt, Sie verwenden Englisch. Standardisieren Sie, sodass jeder Buchstabe die gleiche numerische Länge einnimmt (wenn also 26 Ihre größte Zahl ist, würde 1 „01“ geschrieben werden). Hängen Sie diese dann einfach mit einem vorangestellten Dezimalpunkt an und verwenden Sie dies als Ihre Punktzahl pro Index (d. h. „Hut“ wäre „.080120“). Dadurch erhalten Sie eine richtig geordnete 1-zu-1-Zuordnung zwischen Wörtern und diesen Zahlen. Wenn Sie suchen, wandeln Sie Buchstaben in Zahlen um, und dann können Sie alle netten sortierten Satzfunktionen von Redis wie ZRANGEBYSCORE verwenden ohne sie neu schreiben zu müssen. Die Funktionen von Redis sind sehr, sehr optimal geschrieben, daher ist es viel besser, sie wann immer möglich zu verwenden, anstatt eigene zu schreiben.