2

私は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です。

私はいくつかのオプションを検討しました:

  1. 複数のクエリを実行すると、上記の例のようにグループが 2 つまたは 3 つしかない場合に機能しますが、実際のシナリオでは約 10 になります (10 個の solr クエリで bueno はありません)。
  2. 結果のグループ化/フィールドの折りたたみを使用すると、インデックスの時間中に年齢基準で機能しますが、動的パラメーターに基づいてグループを生成できるとは思いません。
  3. どういうわけか結果にフラグを立て、後で必要な量を除外します(可能かどうかはわかりません)。

ご参考までに、各グループから 10 ずつ、合計 30 の結果を取得しようとしています。何百万もの行をクエリする必要があるため、SQL を使用することはオプションではありません。

4

0 に答える 0