2

Rails 4 を使用しており、Sunspot gem を使用して Web サイトに検索エンジンを実装しようとしていますが、検索結果が常に返されません。検索しているテキストが実際にコンテンツ モデルの自分の属性: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'
  ...

my の後に呼び出される私のsearch.html.hamlファイル:def searchContents 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(" ")) + " ..."

上記のコードで何が起こっているかというと、 my@content常に空です。これは行の後に発生します@content = @search.results。行を削除して を呼び出すと@content = Content.all、すべての Content オブジェクトが期待どおりに表示されるため、これを確認しました。

@search.resultsnil を返す理由を理解できる人はいますか?

4

1 に答える 1

11

次の方法でデータのインデックスを再作成する必要があるようです。

rake sunspot:solr:reindex

Content.allインデックスがないため常に空のセットを返す検索エンジンを使用しているクエリを使用して、solrをバイパスしてそれを行っているため、フェッチできます。

于 2013-08-14T15:54:59.460 に答える