将Solr搜索实现到Rails项目中

时间:2014-06-17 08:45:06

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

我正在尝试将solr搜索实现到我的一个rails项目中。我的问题陈述是能够搜索我的模型并显示相关结果以及自动建议。有人可以帮助我正确完成它。目前我正在尝试使用太阳黑子solr虽然它不能按预期工作。我可以看到在我的项目中创建了一些索引,但搜索无效。也没有自动建议的宝石。以下是我的代码的一些片段。是的,我已经通过solr的其他链接,但它没有解决我的问题。

类别模型

class Category < ActiveRecord::Base
  attr_accessible :name, :parent_category_id, :image, :image_file_name,     :image_content_type, :image_file_size
  has_and_belongs_to_many :events, :join_table => :categories_events

  has_attached_file :image

  searchable do
    text :name
  end

end

我的控制器

if params.has_key?(:category)
  puts "Inside Index Search"
  puts params[:category]
  @search = Category.ransack do 
    fulltext params[:category]
  end
  @category = @search.result.first

我将结果导入@category并在我的视图中使用它来显示。

提前致谢。我非常感谢你的帮助。 : - )

3 个答案:

答案 0 :(得分:3)

Category.ransack方法有什么作用?我假设您正在使用太阳黑子宝石将Solr集成到您的项目中。如果是这样,请使用Category.search搜索索引。然后使用

@search.results

@search.result

所以你的代码应该是这样的:

@search = Category.search do 
    fulltext params[:category]
end

@category = @search.results.first

你也可以写得更短:

@category = Category.search do 
   fulltext params[:category] 
end.results.first

请记住,在Solr中使用索引之前,您已运行:

rake sunspot:solr:reindex

如果您正在寻找有关在Solr上实施自动填充的信息,请阅读以下文章:http://olgagr.github.io/ruby/solr/how-to-implement-autocomplete-with-solr-and-ruby-on-rails

前段时间我也在努力解决这个话题。

答案 1 :(得分:0)

我解决了。 Solr和Ransack gem之间存在冲突,这就是我无法获得结果集的原因。它需要以下更改并立即开始工作。

    @search = Sunspot.search(Category) do 
      fulltext params[:search]
    end
    @category = @search.results

修改

我的回答可能看起来不完整所以只需添加适合我的代码段。

我的模特

searchable do
    text :name, :as => :name_textp
    text :description, :as =>  :description_textp
    text :category_strings, :as => :category_strings_textp
    string :get_valid_dates, :multiple => true
    integer :category_ids, :multiple => true
    boolean :active
    boolean :company_display
end

我的控制器

search_results = Sunspot.search(Event) do
    fulltext current_search
    with(:category_ids, [ id ])
    with(:active, true)
    with(:company_display, true)
    paginate(:page => @current_page, :per_page => page_size)
end

希望它有所帮助。

答案 2 :(得分:0)

Solr &amp;的冲突 Ransack 方法 搜索

请使用 solr_search 代替搜索

例如:

search = Product.solr_search do
  fulltext 'random'
end
search.results