Prz*_*icz 5 sphinx ruby-on-rails thinking-sphinx
有没有一种简单的方法可以将多个Thinking Sphinx搜索结果合并到一个结果中?所有这些搜索都在同一个模型上,但搜索具有不同的搜索字词.我要做的是组合结果,以便它们都可以按日期列进行排序并获得适当的分页.
假设我有一个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
Run Code Online (Sandbox Code Playgroud)
并说我有两个思想家,鲍勃和爱丽丝.我想结合以下搜索:
bob.ideas.search 'pancakes', :order => :created_at, :sort_mode => :desc
alice.ideas.search 'waffles', :order => :created_at, :sort_mode => :desc
Run Code Online (Sandbox Code Playgroud)
......并以某种方式将它们组合在一起,以便将Bob的(煎饼)和Alice的(华夫饼干)想法的集合混合在一起,按降序created_at排序,并由Thinking Sphinx正确分页.在实际使用案例中,我可以在2到15次搜索之间以这种方式组合.
我知道搜索方法返回一个ThinkingSphinx :: Search <Array.我想过手动将这些对象拼接在一起,但事实上我正在寻找排序和分页这使得这有点棘手.
在Thinking Sphinx中有没有一种优雅的方法可以做到这一点,或者我没有遗漏任何东西,我几乎不得不自己动手?
您可能可以很容易地做到这一点,但您需要重写查询以使其更加通用并在Idea模型本身上进行搜索。
Idea.search 'pancakes | waffles', :with => {:thinker_id => [bob.id, alice.id]},
:order => :created_at,
:sort_mode => :desc,
:match_mode => :boolean
Run Code Online (Sandbox Code Playgroud)
你的模型将是:
class Idea < ActiveRecord::Base
belongs_to :thinker
define_index do
indexes text
has created_at, thinker_id
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |