2012-01-19 10 views
5

複数のThinking Sphinx検索の結果を1つの結果にまとめる簡単な方法はありますか?これらの検索はすべて同じモデル上にありますが、検索には個別の検索語があります。私がしようとしているのは、結果を組み合わせて、すべて日付列でソートし、適切なページ設定を受け取ることです。複数のThinking Sphinxクエリの結果を1ページ単位の結果にまとめる

私はThinkerクラスとIdeaクラスがあります。

class Thinker < ActiveRecord::Base 
    has_many :ideas 
end 

class Idea < ActiveRecord::Base 
    belongs_to :thinker 

    define_index do 
    indexes text 
    has created_at 
    end 
end 

私は2人の思想家BobとAliceがいます。

bob.ideas.search 'pancakes', :order => :created_at, :sort_mode => :desc 
alice.ideas.search 'waffles', :order => :created_at, :sort_mode => :desc 

...何とかボブ(パンケーキ)とアリスの(ワッフル)アイデアの収集は、一緒に混合のcreated_atを降順で並べ替え、および適切でページ分割されるように、それらを結合:私は、次の検索を組み合わせたいです思考スフィンクス。実際のユースケースでは、このように組み合わせるには2〜15の検索があります。

私は、検索メソッドがThinkingSphinx :: Search <配列を返すことを知っています。私は手動でこれらのオブジェクトを一緒にスプライシングすることを考えましたが、私がソートとページネーションの両方を探しているという事実はこれを少し難解にしています。

Thinking Sphinxでこれを行うにはエレガントな方法がありますか、それとも何か不足していないと私は自分自身をロールバックする必要がありますか?

答えて

0

これはかなり簡単に行うことができますが、より一般的な検索を書き直してIdeaモデル自体で検索する必要があります。

Idea.search 'pancakes | waffles', :with => {:thinker_id => [bob.id, alice.id]}, 
            :order => :created_at, 
            :sort_mode => :desc, 
            :match_mode => :boolean 

そして、あなたのモデルは次のようになります。

class Idea < ActiveRecord::Base 
    belongs_to :thinker 

    define_index do 
    indexes text 
    has created_at, thinker_id 
    end 
end 
+1

グレート提案ページネーションと簡単なソートを使用することができますが、このクエリも見つける「パンケーキ」を含むアリスによって「ワッフル」を含むボブのアイデア、そしてアイデアを見つけるだろう。 「パンケーキ」の検索用語をボブのアイデアに適用し、アリスのアイデアに「ワッフル」を適用するだけです。 –

1
first_search = bob.ideas.search 'pancakes', :order => :created_at, :sort_mode => :desc 
second_search = bob.ideas.search 'pancakes', :order => :created_at, :sort_mode => :desc 
results = first_search.flatten + second_search.flatten 

あなたが今日付でソートあなたは

sorted_results = results.sort_by(&:date) 

が、これはスフィンクスが仕事考える

4

を支援を期待したいことができますようにカミナリ。 あなたはすでにあなたのgemfileにkaminariを持っています。

result = bob.ideas.search 'pancakes', :order => :created_at, :sort_mode => :desc 
result += alice.ideas.search 'waffles', :order => :created_at, :sort_mode => :desc 

結果はもはやThinkingSphinx :: Searchではなくなりました。これは、アレイ

result = Kaminari.paginate_array(result) 

あなたが結果に

関連する問題