通过思考sphinx获取列的最大值和最小值

我正在使用Rails并思考sphinx。 我有一个模型产品索引如下(仅显示相关信息)

define_index do indexes :name, :as => :name, :sortable => true indexes color, :facet => true ... indexes price, :as => :range, :facet => true has created_at, price, root_category_id ... end 

我需要的是以当前搜索的最高价格获得产品。 我尝试过类似的东西

  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] 

我真的不明白为什么它会做那个奇怪的查询,为什么它会添加它返回数组的位置和原因。

此致,佛朗哥。

简短回答:Sphinx无法返回汇总数据 – 它总是返回文档记录(在本例中为产品)。 您必须使用ActiveRecord / SQL进行此类查询。

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