我正在使用 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毕业年份是酒吧。
我考虑了几个选项:
- 进行多个查询时,如果只有 2 或 3 个组(如上面的示例),则此方法有效,但在实际场景中将有 10 个左右(10 个 solr 查询一个 no bueno)。
- 使用 Result Grouping/Field Collapsing 这将适用于年龄标准,因为我知道在索引期间,但我认为我无法根据动态参数生成组。
- 以某种方式标记结果并稍后过滤掉所需的数量(不确定是否可能)。
如果您想知道我正在尝试获得 30 个结果,每组 10 个。使用 SQL 不是一种选择,因为我必须查询数百万行。