Ruby on rails 使用sphinx获取列的最大值和最小值

Ruby on rails 使用sphinx获取列的最大值和最小值,ruby-on-rails,thinking-sphinx,Ruby On Rails,Thinking Sphinx,我和Rails一起工作,思考斯芬克斯。我有一个模型产品索引如下(仅显示相关信息) 我需要的是获得当前搜索的最高价格的产品。我试过类似的方法 Product.search('', :select => 'MAX(price)') 但这让我又变得一团糟 >> Product.search_for_ids( :select => 'MAX(price)') Sphinx Query (3.0ms) Sphinx Found 732 results Product Lo

我和Rails一起工作,思考斯芬克斯。我有一个模型产品索引如下(仅显示相关信息)

我需要的是获得当前搜索的最高价格的产品。我试过类似的方法

 Product.search('', :select => 'MAX(price)')
但这让我又变得一团糟

>> Product.search_for_ids( :select => 'MAX(price)')
Sphinx Query (3.0ms)  
Sphinx  Found 732 results
Product Load (0.4ms)  SELECT MAX(price) FROM `products` WHERE `products`.`id` IN (388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
我真的不明白它为什么要做那个奇怪的查询,为什么要在哪里添加,为什么要返回数组

问候,,
Franco.

简短的回答是:Sphinx不能返回聚合数据-它总是返回文档记录(在本例中为产品)。对于这种类型的查询,您必须使用ActiveRecord/SQL


至于您尝试返回奇数值的原因:使用Thinking Sphinx v2和更早版本,当Sphinx结果转换为ActiveRecord选项(您可以看到的SQL调用)时,
:select
选项将传递到底层ActiveRecord调用。您已经从SELECT子句中删除了主键,因此认为Sphinx无法将Sphinx结果与产品实例进行匹配,因此对于每个失败的匹配都返回nil。

谢谢Pat,我怀疑这是不可能的:)。
>> Product.search_for_ids( :select => 'MAX(price)')
Sphinx Query (3.0ms)  
Sphinx  Found 732 results
Product Load (0.4ms)  SELECT MAX(price) FROM `products` WHERE `products`.`id` IN (388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 407, 408)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]