我正在使用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.haml
中def 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?
答案 0 :(得分:11)
似乎您需要使用以下内容重新编制数据:
rake sunspot:solr:reindex
你可以获取Content.all
,因为你正在绕过solr,查询你正在使用搜索引擎,它总是返回空集,因为它没有任何索引。