私はsolrとsunspotを使用して、数百万のレコードで複雑な検索を実行しています:(簡潔にするために簡略化)
Model.solr_search do |query|
query.any_of
# fairly simple to accomplish with Grouping/Field Collapsing
with(:age).between(10..20)
with(:age).between(20..30)
# trying to limit the number of results I get for the following
query.all_of do |q|
q.with(:school_id).any_of(@user.school.id)
q.with(:graduation_year).between(@user.graduation_year..@user.graduation_year+1)
end
end
end
私がやりたいことは、年齢が 10 から 20 の間で、年齢が 20 から 30 の間である事前定義された数の結果を取得することです。そして卒業年はbarです。
私はいくつかのオプションを検討しました:
- 複数のクエリを実行すると、上記の例のようにグループが 2 つまたは 3 つしかない場合に機能しますが、実際のシナリオでは約 10 になります (10 個の solr クエリで bueno はありません)。
- 結果のグループ化/フィールドの折りたたみを使用すると、インデックスの時間中に年齢基準で機能しますが、動的パラメーターに基づいてグループを生成できるとは思いません。
- どういうわけか結果にフラグを立て、後で必要な量を除外します(可能かどうかはわかりません)。
ご参考までに、各グループから 10 ずつ、合計 30 の結果を取得しようとしています。何百万もの行をクエリする必要があるため、SQL を使用することはオプションではありません。