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 之间。我还想获得预定数量的匹配,其中 school_id 是 foo毕业年份是酒吧。

我考虑了几个选项:

  1. 进行多个查询时,如果只有 2 或 3 个组(如上面的示例),则此方法有效,但在实际场景中将有 10 个左右(10 个 solr 查询一个 no bueno)。
  2. 使用 Result Grouping/Field Collapsing 这将适用于年龄标准,因为我知道在索引期间,但我认为我无法根据动态参数生成组。
  3. 以某种方式标记结果并稍后过滤掉所需的数量(不确定是否可能)。

如果您想知道我正在尝试获得 30 个结果,每组 10 个。使用 SQL 不是一种选择,因为我必须查询数百万行。

4

0 回答 0