0

私はRailsと思考スフィンクスで働いています。次のようにインデックス付けされたモデル製品があります(関連情報のみを表示)

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]

なぜその奇妙なクエリを実行しているのか、なぜそれをどこに追加しているのか、なぜ配列を返すのか、私には本当にわかりません。

よろしく、フランコ。

4

1 に答える 1

2

簡単な答え: Sphinx は集計データを返すことができません。常にドキュメント レコード (この場合は製品) を返します。このタイプのクエリには ActiveRecord/SQL を使用する必要があります。

あなたの試みが奇数の値を返す理由について: Thinking Sphinx v2 以前では、:selectSphinx の結果が ActiveRecord オプション (表示される SQL 呼び出し) に変換されるときに、オプションが基になる ActiveRecord 呼び出しに渡されます。SELECT 句から主キーを削除したため、Thinking Sphinx は Sphinx の結果を Product インスタンスに一致させることができず、一致に失敗するたびに nil が返されます。

于 2013-04-09T15:29:34.727 に答える