プロジェクトにスケジュールがあり、スケジュールにはさまざまな名前と期日があるシナリオがあります。
プロジェクトを検索し、プロジェクト フィールドの値やポリモーフィック フィールドの値で並べ替えることができるとすれば、要求されたスケジュール名を持つスケジュールに基づいて結果を並べ替えるにはどうすればよいでしょうか。
わかりやすい英語で言えば、Thinking-Sphinx で、一致するスケジュール名の期日で検索結果を並べ替えるにはどうすればよいですか。プロジェクトを「ブッキング」(スケジュール)期日順にソートしたい。
これはSphinxでは単純なはずですが、私を回避しているようです。スケジュール名を考慮した検索後の並べ替えを作成することを考えましたが、Sphinx の並べ替えの方がはるかに好ましいでしょう。
次のようなことを試しましたが、スケジュール名を考慮していません。
class Project
has_many :schedules
define_index do
has schedules.due_date, :type => :datetime, :as => :due_date
end
end
$: Project.search(query, :order => "due_date desc", :match_mode => :extended)
興味深いことに、それで結果が得られますが (ある程度ソートされています)、正確ではありません。おそらく、1 つのプロジェクトに属する多くのスケジュールが考慮されておらず、フィールド値固有ではないためです。「with」の使用も検討しましたが、
Thinking Sphinx でこれを達成する方法はありますか? (私は Rails 2.3.x を使用しているので、thinking-sphinx 1.4.3 を使用しています。)
[編集] <=> 演算子を使用してこのポスト検索を正常にソートしましたが、スケジュールを検索する必要があります。式の並べ替えも調べましたが、それは検索対象のモデルのフィールドのみです。それを利用できるようにするために何にインデックスを付けることができるかわかりません。