Ruby on rails 如何使用Sunspot Solr搜索多个表(模型)?
我希望用户能够使用一个搜索框来搜索不同的对象。我会在结果页面上区分它们。两者都是全文搜索 我是否应该制作一个搜索控制器,并使用以下内容将所有内容加载到索引操作中:Ruby on rails 如何使用Sunspot Solr搜索多个表(模型)?,ruby-on-rails,ruby-on-rails-3,search,solr,sunspot,Ruby On Rails,Ruby On Rails 3,Search,Solr,Sunspot,我希望用户能够使用一个搜索框来搜索不同的对象。我会在结果页面上区分它们。两者都是全文搜索 我是否应该制作一个搜索控制器,并使用以下内容将所有内容加载到索引操作中: @posts = Post.all @groups = Group.all 有些事情告诉我,这将是非常低效的 我真的不知道从哪里开始,我还没有在互联网上找到任何解决这个问题的方法,但是如果我忽略了什么,请告诉我 谢谢 编辑: 这是我的搜索栏,可在我的网站上全球搜索: -form_tag posts_path, :method
@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”模型,并在Post#index视图上显示结果
我希望能够在Post表和Group表中搜索输入到搜索框中的查询,并在同一页面上的两个单独列中显示结果。可能通过搜索控制器/视图将来自sunspot solr的可搜索指令添加到您的模型中以进行索引。例如:
class Post < ActiveRecord::Base
searchable do
text :title, :body
end
end
class Group < ActiveRecord::Base
searchable do
text :name
end
end
现在您有了两列的数据。这不是答案,但我发现了一些有用的东西。它是一个帮助您在多个表中搜索的gem:
它有助于将所有可搜索数据(来自不同型号)保存在一个位置。如果要同时搜索两种类型,可以使用以下表单:
# Pass your models in by class constant
Sunspot.search(Post,Group) do |s|
s.fulltext(params[:search])
end
这在wiki中有记录:
你想实现什么目标?在两列中显示结果?在第一组、第二篇文章中展示他们?按相关性顺序显示它们?用代码编辑以解释我的意思。我希望结果显示在两列中,每列对应于对象的类型。但是如果有一个搜索栏,比如说一个用户在“roller skates”中键入内容,我如何同时在两个表中运行该搜索?我应该制作一个搜索控制器吗?现在,
@posts=Post.seach{fulltext params[:search]
正在Post#index操作中执行,因此当我尝试添加@groups=Group.search{fulltext params[:search]
它不起作用它不断地给我错误太阳黑子的未定义方法'model_name::Search::StandardSearch:Class
我现在通过一个搜索控制器运行它。Post和Group都被设置为'searchable'明白了!我必须使用不同的格式,而不是:@posts=Post.Search{fulltext params[:Search]}
等…我必须执行@search=Post.search do{fulltext params[:search]}end@posts=@search.results
此解决方案将两次调用太阳黑子服务器和两次调用数据库。knowuh下面的答案更可取。
# Pass your models in by class constant
Sunspot.search(Post,Group) do |s|
s.fulltext(params[:search])
end