0

プロジェクトにスケジュールがあり、スケジュールにはさまざまな名前と期日があるシナリオがあります。

プロジェクトを検索し、プロジェクト フィールドの値やポリモーフィック フィールドの値で並べ替えることができるとすれば、要求されたスケジュール名を持つスケジュールに基づいて結果を並べ替えるにはどうすればよいでしょうか。

わかりやすい英語で言えば、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 を使用しています。)

[編集] <=> 演算子を使用してこのポスト検索を正常にソートしましたが、スケジュールを検索する必要があります。式の並べ替えも調べましたが、それは検索対象のモデルのフィールドのみです。それを利用できるようにするために何にインデックスを付けることができるかわかりません。

4

2 に答える 2

2

Pat Allan より: 私が説明した方法では不可能です。代わりにスケジュールを検索する必要があります。

Google グループのディスカッションに関するPat の回答を参照してください。「あなたがしようとしていることは、あなたが考えているように Sphinx では不可能です: Sphinx は、フィールドまたは属性内の異なるデータ間の関係をまったく理解していないため、スケジュールの日付とスケジュール名をリンクするものは何もありません。プロジェクト インデックス内. 代わりにスケジュールで検索することをお勧めします. その後, スケジュール名とスケジュール期日は 1 つしかないので問題ないはずです. そこから, 検索結果でそのスケジュールのプロジェクトを使用できます. "

于 2013-02-16T21:49:35.920 に答える
1

次のようにクエリを使用する必要があると思います

デフォルトでは、指定する必要がある変更のためのソートモードは asc です

Project.search <query>, :order => <attribute_name>, :sort_mode => :desc, :match_mode =>:extended

複数の属性または Sphinx のランキング スコアを使用する場合は、:extended ソート モードを使用する必要があります。

Project.search <query>, :sort_mode => :extended, :order => "attribute_name DESC/ASC, @relevance DESC/ASC", :match_mode=> :extended

http://pat.github.com/ts/en/searching.html#sorting

于 2013-02-08T13:03:04.300 に答える