-
このためにRedisを使用することは強くお勧めしません。大量の追加のポインタデータを保存することになります。たとえば、
SELECT WHERE first_name LIKE 'jon%'
のような、より複雑なクエリを実行することにした場合は、 あなたは問題にぶつかるでしょう。また、2つのフィールドを同時に検索する場合に備えて、複数の列にまたがる非常に大きなインデックスを設計する必要があります。基本的に、検索フレームワークをハッキングして再設計し続ける必要があります。 Elastic SearchやSolr、または自分がやろうとしていることを実行するためにすでに構築されている他のフレームワークを使用する方がはるかに良いでしょう。 Redisは素晴らしく、多くの良い用途があります。これはそれらの1つではありません。 -
警告はさておき、あなたの実際の質問に答えるために:私はあなたがあなたの最初の解決策の変形を使用するのが最も良いと思うでしょう。インデックスごとに1つのソートされたセットを使用しますが、文字を数字に変換するだけです。文字を10進値に変換します。英語を使用している場合は、ASCII値を使用するか、各文字を辞書式順序で1〜26の値に割り当てることができます。各文字が同じ数値の長さになるように標準化します(したがって、26が最大数の場合、1は「01」と表記されます)。次に、これらを前に小数点を付けて追加し、それをインデックスごとのスコアとして使用します(つまり、「帽子」は「.080120」になります)。これにより、単語とこれらの数字の間で適切に順序付けられた1対1のマッピングが可能になります。検索するときは、文字から数字に変換すると、
ZRANGEBYSCORE
のようなRedisの優れたソート済み集合関数をすべて使用できるようになります。 それらを書き直す必要はありません。 Redisの関数は非常に最適に記述されているため、独自の関数を記述するのではなく、可能な限りそれらを使用することをお勧めします。