Rails4- Sunspot- fulltext params [:search]始终不返回任何结果

时间:2013-08-14 15:20:07

标签: ruby-on-rails search ruby-on-rails-4 sunspot

我正在使用Rails 4,我正在尝试使用Sunspot gem为我的网站实现搜索引擎,但我的搜索始终没有返回任何结果。我已确认我正在搜索的文字实际上位于我的内容模型中的:title:text属性中。

我的Content.rb型号:

class Content < ActiveRecord::Base
    searchable do
        string :title
        text :text
    end
    validates :title, presence: true
    validates :text, presence: true
    has_many :links
    validates_associated :links
    accepts_nested_attributes_for :links
end

我的搜索表单位于application.html.haml

  = form_tag search_path, :method => :get do
%p
  = text_field_tag :search, params[:search]
  = submit_tag "Search"

我的contents_controller。rb控制器:

class ContentsController < ApplicationController
    ...
    def search
        if params[:search]
            @search = Content.search do
                fulltext params[:search]
            end
            @query = params[:search]
            @content = @search.results
        else
            @content = Content.all
        end
    end
    ...
end

我的Gemfile

  ...
  gem 'sunspot_rails'
  gem 'sunspot_solr'
  ...

我的search.html.hamldef search之后调用的Contents Controller文件:

-if @content.empty? || @query == nil
    %p="No results found for: #{@query}"
-elsif !@query.empty?
    %p="Your search results for #{@query}"
-@content.each do |c|
    %h1.content-title=link_to removeHTML(c.title), content_path(c)
    %p.content-text=removeHTML(c.text.split[0..25].join(" ")) + " ..."

上述代码中发生的事情是我的@content 总是为空。这发生在行@content = @search.results之后。我已经验证了这一点,因为如果我删除该行并调用@content = Content.all,它会按预期显示我的所有内容对象。

任何人都可以帮助我理解为什么@search.results会返回nil?

1 个答案:

答案 0 :(得分:11)

似乎您需要使用以下内容重新编制数据:

rake sunspot:solr:reindex

你可以获取Content.all,因为你正在绕过solr,查询你正在使用搜索引擎,它总是返回空集,因为它没有任何索引。