質問

SolRNetを使用してSolRインデックスがアクセスされているため、結果のすべてのセットを返すことなく、特定のドキュメントのインデックス(位置)を取得したいと思います。

さらに詳しくは...クエリは約30,000のドキュメントを返し、整数フィールドによって注文されます。ユニークなキーフィールドにはGUIDが含まれています。最初の10の結果を返すのは、一意のキーに基づいて、特定のドキュメントがどこにあるかを見つけたいと思います。

このインデックスはもともとプレーンオールドルーセンで実装されており、このタスクは2つのクエリで達成されました。1つは、私が知りたいドキュメントのLucene Doc IDを取得するために、次に結果セット全体を返す2番目のクエリを取得しました。次に、ドキュメントIDを使用して、完全な結果セットでドキュメントが表示される場所を見つけることができますが、最初の10のドキュメントのみを列挙します。

30000すべての結果を返すことなく、SolRで私が追い出していることを達成する方法はありますか(これをGUIDに制限することさえ遅すぎるように思えます)?

ありがとう

役に立ちましたか?

解決

ユーザーポイントを含む範囲クエリを使用できると思います。明示的なクエリを実行するか、ファセット範囲アプローチを使用してその情報を取得できます。

したがって、ユーザーポイントが10.000であることがわかっている場合、クエリ:ゲーム:Tetris Point [Maxint to 10000]を実行でき、結果が375の場合、ユーザーがランク375にあることがわかります。

他のヒント

私が考えることができる唯一の信頼できる方法は、インデックス時にランキングを構築することです。つまり、インデックスを構築するときに「ランク」整数フィールドを持ち、それを入力します。これの欠点は、すべてのアップデートがインデックス全体を再構築する必要があることです。

Lucene Doc IDは安定していません。これに使用することはお勧めしません(参照 これ, これ, これ)、そしてsolrはとにかくそれらを暴露しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top