ここでやろうとしているのは転置インデックスです。
列ごとに、「セット」にマップします。次に、セットを交差させて結果を得ることができます。
したがって、APPLE: RED ROUND FRUIT
次の挿入にマップされます:
SADD p1:RED APPLE
SADD p2:ROUND APPLE
SADD p3:FRUIT APPLE
次に、* ROUND FRUIT
をクエリするとします。 、私はします:
SINTER p2:ROUND p3:FRUIT
このコマンドは、p2:ROUND
の項目の共通部分を取得しています セットとp3:FRUIT
セットする。これにより、ROUND
であるすべてのアイテムが返されます およびFRUIT
、p1
を気にしない です。
その他の例:
SMEMBERS p1:GREEN
SINTER p1:RED p2:ROUND p3:FRUIT
SUNION p1:RED p1:GREEN
交差演算はO(N*M)
であるため、上記の回答では計算能力を使用します。 。これを行う方法は、メモリを大量に消費しますが、インデックスを効果的に事前計算するため、取得が高速になります。
プロパティの組み合わせごとに、セットを格納するキーを作成します。
したがって、APPLE: RED ROUND FRUIT
次の挿入にマップされます:
SADD RED:ROUND:FRUIT APPLE
SADD :ROUND:FRUIT APPLE
SADD RED::FRUIT APPLE
SADD RED:ROUND: APPLE
SADD RED:: APPLE
SADD :ROUND: APPLE
SADD ::FRUIT APPLE
SADD ::: APPLE
次に、クエリを実行するには、それぞれのキーにアクセスするだけです。例:* ROUND FRUIT
単純に
SMEMBERS :ROUND:FRUIT
明らかに、これは、多くのディメンションがある場合、メモリの観点からはまったく拡張性がありませんが、結果を取得するのは非常に迅速です。