必要なのは、フィールドの逆インデックスcolour
、つまりマッピングcolour -> {keyA, ..., keyB}
です"red" -> {key1, key2}
。
Ohmで説明されているように、Redisセットを使用してこのインデックスを維持できます。
Redis のセットは順序付けられていないリストです [...] 各モデルのインスタンスを追跡し、インデックスを生成および維持するために、Ohm によって内部的に使用されます。
Didier Spezia によるこの回答も参照してください。
要約すると、クエリを実行する方法でデータを保存します。
オームの例
舞台裏でオームに起こっていることは次のとおりです。
最初に Ohm モデルを宣言し、colour
クエリを実行するために属性にインデックスを付けます。
require "ohm"
class Doc < Ohm::Model
attribute :colour
index :colour
end
次に、いくつかのドキュメントを作成します。
ruby> Doc.create(:colour => "red")
ruby> Doc.create(:colour => "green")
ruby> Doc.create(:colour => "red")
このステップで、オームが関連するインデックスに保存したものを調べます。
redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"
もう 1 つの赤いドキュメントを作成します。
ruby> Doc.create(:colour => "red")
インデックスを再検査します。
redis> SMEMBERS "Doc:indices:colour:red"
1) "1"
2) "3"
3) "4"
最後のレコードを反映するようにインデックスが更新されました。
ドキュメントを効率的にクエリできるようになりました。
ruby> Doc.find(:colour => "red").each {|d| puts d.id}
1
3
4