如何使用Sunspot Solr搜索多个表(模型)?

时间:2011-12-12 21:05:22

标签: ruby-on-rails ruby-on-rails-3 search solr sunspot

我希望用户能够使用一个搜索框来搜索不同的对象。我会在结果页面上区分它们。两者都是全文搜索。

我应该创建一个搜索控制器并将所有内容加载到索引操作中,例如:

@posts = Post.all
@groups = Group.all

有些东西告诉我,这将是非常低效的。

我不确定从哪里开始,我还没有设法在互联网上找到解决这个问题的任何内容,但如果我忽略了某些事情,请告诉我。

由于

编辑: 这是我的搜索栏,可在我的网站上全球使用:

    -form_tag posts_path, :method => :get do
     =text_field_tag :search, params[:search], :id => 'searchfield'
     =submit_tag '',:name => nil, :id => 'searchbutton'

它现在只搜索“发布”模型,并在Post#index视图

上显示结果

我希望能够在Post和Group表中搜索在搜索框中输入的查询,并且结果将显示在同一页面上的两个单独的列中。也许通过搜索控制器/视图

3 个答案:

答案 0 :(得分:6)

如果您想一次搜索这两种类型,可以使用以下格式:

# Pass your models in by class constant
Sunspot.search(Post,Group) do |s| 
    s.fulltext(params[:search])
end

这在wiki中有记录: https://github.com/sunspot/sunspot/wiki/Working-with-search#initiating-a-search

答案 1 :(得分:3)

将sunspot solr中的可搜索指令添加到模型中以进行索引。例如:

class Post < ActiveRecord::Base
  searchable do
    text :title, :body
  end
end

class Group < ActiveRecord::Base
  searchable do
    text :name
  end
end

如果您在数据库中有现有数据,请确保运行rake sunspot:solr:reindex进行索引。对于新数据,索引将在钩子中完成。

现在你可以搜索:

@posts = Post.search {fulltext params[:search]}
@groups = Group.search {fulltext params[:search]}

现在您拥有两列的数据。

答案 2 :(得分:0)

这不是答案,但我发现了一些有用的东西。它是一个宝石,可以帮助您搜索多个表:

https://github.com/toptierlabs/acts_as_fulltextable

它可以帮助您将所有可搜索的数据(来自不同的模型)保存在一个地方。