我希望用户能够使用一个搜索框来搜索不同的对象。我会在结果页面上区分它们。两者都是全文搜索。
我应该创建一个搜索控制器并将所有内容加载到索引操作中,例如:
@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表中搜索在搜索框中输入的查询,并且结果将显示在同一页面上的两个单独的列中。也许通过搜索控制器/视图
答案 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。
它可以帮助您将所有可搜索的数据(来自不同的模型)保存在一个地方。