太阳黑子Solr Rails - 隐藏的领域范围和相关模型

时间:2012-06-18 16:04:03

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

我想使用隐藏字段参数(colour_id)来优化我对与特定颜色相关联的结构的搜索。

面料有很多颜色,供应商和类别

但是我希望搜索表单中隐藏字段的参数(colour_ids)过滤结构,以便只搜索与这些颜色相关联的结构。

从我收集的内容来看,最好的方法是在我的搜索中添加范围,并将这些隐藏字段的参数传递给范围,以便将搜索结果缩小到仅与这些颜色相关联的结构。

我的面料模型看起来像这样

class Fabric < ActiveRecord::Base
  has_many :fabric_categories
  has_many :categories, :through => :fabric_categories
  has_many :suppliers, :through => :fabric_suppliers
  has_many :fabric_suppliers
  has_many :colours, :through => :fabric_colours
  has_many :fabric_colours


  # solr search method
  searchable do
  text :name, :boost => 5
  text :description
  text :categories do
    categories.map(&:name)
  end
  text :suppliers, :boost => 2 do
   suppliers.map(&:name)
   end
  end

我的控制器

  class FabricsController < ApplicationController

  def index
    @search = Fabric.search do
    fulltext params[:search]

     #scoped assets
     @fabrics = @search.results

和我的观点

  <%= form_tag fabrics_path, :method => :get, :class => 'form-search'  do %>
    <%= text_field_tag :search, params[:search], :class => 'query', id: "auto_complete", :placeholder => '', :autocomplete => "off" %>
    <div id="colour_ids">
      <%= hidden_field_tag :colour_1 %>
    </div>
    <%= submit_tag "Search", :name => nil, :class => 'btn', :id => 'search_button' %>
  <% end %>

1 个答案:

答案 0 :(得分:1)

您需要将category_ids添加到索引中,方法是将其包含在searchable块中:

searchable do
  ...
  integer :colour_ids, :multiple => true do
    colours.map(&:id)
  end
end

执行此操作后,您需要重新编制索引。

然后在您的查询中,您需要在FabricsController#index中包含这样的条件:

@search = Fabric.search do
  fulltext params[:search]
  with :colour_ids, params[:colour_1]
end