【问题标题】:Searching Multiple Models Simultaneously in Sunspot/Solr for Rails在 Sunspot/Solr for Rails 中同时搜索多个模型
【发布时间】:2012-05-07 19:41:04
【问题描述】:

简单的问题,如何使用 Sunspot 搜索多个模型?...我正在使用带有 Rails 的 Sunspot,但我似乎无法找到如何搜索多个模型。我需要创建一个单独的控制器还是可以将 Gear 控制器与 index 操作一起使用?

感谢您的帮助。

(旁注:我在 stackoverflow 上发现了一个与此非常相似的问题,但他们没有发布他们的代码。所以对于任何冗余,我深表歉意。)

我的观点如下:

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

及以下型号

装备

class Gear < ActiveRecord::Base
  attr_accessible :title, :size, :price, :sub_category_id, :user_id, :image, :image_a, :remote_image_url
  belongs_to :user
  belongs_to :sub_category
  has_one :category, :through => :sub_category
  has_many :comments, :dependent => :destroy 
  require 'carrierwave/orm/activerecord'
  mount_uploader :image, GearpicUploader
  mount_uploader :image_a, GearpicUploader


  searchable do
    text :title, :size, :price #need to add sub-category, and User Name.  
  end...

用户

class User < ActiveRecord::Base 
  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :userimage, :remove_userimage
  has_secure_password
  has_many :gears
  has_many :comments, :dependent => :destroy 
  has_one :store, :dependent => :destroy
  before_save :create_remember_token
  require 'carrierwave/orm/activerecord'
  mount_uploader :userimage, UserpicUploader

   searchable do
     text :first_name, :last_name
   end...                    

齿轮控制器

class GearsController < ApplicationController
  def index
    @search = Gear.search do
        fulltext params[:search]
        paginate(page: params[:page])
    end

    @gears = @search.results
  end...

【问题讨论】:

    标签: ruby-on-rails model solr sunspot


    【解决方案1】:
    Sunspot.search [Gear, User] do
      ....
    end
    

    【讨论】:

    • 不幸的是,如果您正在分页并且 Gear 中有足够的结果,它将不会返回任何用户对象。我一直希望它能同时获得结果并按相关性排序。
    • @Kevin,你能通过按创建日期排序来解决这个问题吗?
    • 在进行全文搜索时,您可以使用 order_by(:score, :desc) 按分数对结果进行排序
    • 这段代码应该保存在哪个文件中?我如何告诉 Sunspot 将其编入索引?
    【解决方案2】:

    另外,一个可以派上用场的宝石是

    https://github.com/toptierlabs/acts_as_fulltextable

    它与搜索服务器没有任何依赖关系。

    【讨论】:

      猜你喜欢
      • 2013-09-19
      • 2015-05-28
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多