如何使用太阳黑子solr(ROR)在两个表上执行搜索

时间:2014-05-15 11:00:24

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

我刚开始学习ROR,我需要帮助。

我有两张桌子,我需要使用Sunspot solr搜索它们。搜索可能会查找公司和标题等内容,因此,如何使用太阳黑子solr(ROR)组织搜索两个表?

section.rb

class Section < ActiveRecord::Base
  has_many :headings
  searchable do
    text :name
  end
end

heading.rb

class Heading < ActiveRecord::Base
  belongs_to :section
  searchable do
    text :name
    text :address
    text :phone
  end
end

标题控制器

def index
  @sections = Section.all
  @headings = Heading.all
  @search = Sunspot.search(Heading, Section) do
    fulltext params[:search]
  end
  @headsear = @search.results
end

def show
  @se = Section.all
  @sections = Section.all
  @headings = Heading.find(params[:id])
  @sections = Section.find(params[:id])
end

标题/ _search.html.erb

<%= form_tag headings_path, :method => :get do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

2 个答案:

答案 0 :(得分:0)

在你的变量@headsear中你有两个:标题对象和节对象 如果您希望将这些结果分为2个变量,则可以调用两次搜索方法:

@headings = Heading.search {fulltext params[:search]}
@sections = Section.search {fulltext params[:search]}

另一个解决方案是仅搜索标题并使用与Section:

的关系

您需要将节数据编入Heading类,如下所示: 的 heading.rb

class Heading < ActiveRecord::Base
  belongs_to :section
  searchable do
    text :name
    text :address
    text :phone
    text(:section_name) { section.name }
  end
end

在此之后,当一个部分的名称与搜索参数匹配时,结果将包含所有与标题对象相关的

希望得到这个帮助。

答案 1 :(得分:0)

Sunspot.search Heading, Section do
  fulltext params[:search]
end