あなたはこの
{ score:2131, attributes: ["attr1", "attr2", "attr3"], ... }
のようなあなたのオブジェクトを保存した場合、その後、次のクエリは「ATT1とATTR2
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] } })
が、このウォンを持っているすべての項目にマッチしますトンと一致すること
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr4" ] } })
あなたはこのカーソルをソートする場合は、クエリは、カーソルを返し、トン鶏はちょうどそう
c = db.mycol.find({ attributes: { $all: [ "attr1", "attr2" ] }}).sort({score:1})
ようなクエリにソートパラメータを追加可能ですか見てAdvanced Queriesを見てください。
db.mycol.ensureIndex({attributes:1, score:1})
を次のように
適切なインデックスを設定することができ、あなたはMongoの操作が や他のさまざまな統計情報をかかった時間、スキャンされたどのように多くのオブジェクトを説明し
db.mycol.find({ attributes: { $all: [ "attr1" ] }}).explain()
を使用してパフォーマンス情報を取得することができます。
「スコア順」と言ったとき、これは既に計算済みであることを意味しますか?もしそうなら、SOLRは何の利益ももたらさないかもしれません。そうでない場合、SOLRは非常に強力でカスタマイズ可能な関連性ランキングを提供します。 – nickdos
数百万のアイテムはSOLRでは問題ありませんが、10,000個の可能な属性_が問題になります。 SOLRはダイナミックフィールドをサポートしているため、すべての属性を定義する必要はありませんが、ワイド/スパースのスキーマでメモリが壊れる可能性はありますか?他の人がこれについてより良いアドバイスをすることができるかもしれません。 – nickdos
@nickdosはいスコアはあらかじめ計算されています。そして、私はあなたが間違っているのは、多くの属性が正しいことだと思います。私はmongodbがこれをどのように処理するのか分かりません。属性ごとに1つのインデックスを作成しますか?多くのインデックスを持つことも可能ですか?とにかく試してみるつもりですが、正しい戦略を見逃さないようにしたいと思います。 – log0