【问题标题】:Rails4- Sunspot- fulltext params[:search] always returns no resultsRails4- Sunspot- fulltext params[:search] 总是不返回结果
【发布时间】:2013-08-16 15:21:38
【问题描述】:

我正在使用 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 文件在我的Contents Controller 中的def search 之后调用:

-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?

【问题讨论】:

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


    【解决方案1】:

    似乎您需要使用以下方法重新索引数据:

    rake sunspot:solr:reindex
    

    您可以获取Content.all,因为您是通过绕过 solr 进行的,而查询您使用的搜索引擎总是返回空集,因为它没有任何索引。

    【讨论】:

    • 非常感谢!运行该命令时,它告诉我添加 gem progress_bar。这样做之后,它的工作原理!
    • 你应该总是在更改searchable 块后重新索引,没有它 solr 不会失败,但你不会从新字段中获取数据。
    • @Matrix:你的模型真的有索引吗?您是否看到带有一些数字的进度条?也许您的 searchable 块中有一些逻辑会导致这种行为。
    • 我也使用index! 方法,但仅此而已。我必须看哪里才能看到这个进度条?没有索引怎么办。如果index!rake sunspot:solr:reindex 不起作用,有什么好处?!谢谢。
    • 当您使用 rake 任务时,您应该会看到一些进度条,即使您只有一个可以索引的对象。
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多