我错过了Solr-Sunspot设置的哪一部分?

Tri*_*rip 3 search solr ruby-on-rails sunspot

我以为我有这个蛋糕..但任何时候我对任何关键字进行查询它不会从SQL加载任何表.我没有错.

user.rb

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end
Run Code Online (Sandbox Code Playgroud)

users_controller.rb

class Admin::UsersController < Admin::ApplicationController

  def index
    s = Sunspot.search User do |query|
      query.keywords params[:q]
      query.any_of do |any_of|
        any_of.with(:first_name)
        any_of.with(:first_name)
        any_of.with(:email)
        any_of.with(:name)
      end
      query.paginate :page => (params[:page] && params[:page].to_i || 1), :per_page => 20
      query.order_by('created_at', 'desc')
    end

    s.execute!
    @users = s.results

    render :action => 'index'
  end
Run Code Online (Sandbox Code Playgroud)

然后我跑了:

$> script/console
$> User.reindex
Run Code Online (Sandbox Code Playgroud)

当我根本没有搜索时..成功显示所有User结果

相信我要将所有这些字符串标记转换为文本标记,但会返回此错误:

Sunspot::UnrecognizedFieldError in Admin/usersController#index

No field configured for User with name 'first_name'
Run Code Online (Sandbox Code Playgroud)

为了回应关键字,我错过了什么?

Nic*_*zny 12

(对您自己的自我跟进的更完整的解释.)

关于你的设置:

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end
Run Code Online (Sandbox Code Playgroud)

Solr中的字符串旨在用于完全匹配.它不像文本列那样进行预处理或标记.这些文字匹配用于过滤("category_name等于'Sale'"),分面,排序等.

你更可能想要text字段.文本字段使用标准标记进行标记,使用LowerCase过滤器进行小写,并使用标准过滤器删除其点和撇号以及许多其他可能的选项.

当人们想到Solr全文搜索的功能时,他们会考虑如何处理text字段.

此外,keywords默认情况下,Sunspot的搜索方法会搜索所有文本字段,这解释了当您包含时未获得结果的原因keywords- 您的文档没有要搜索的文本字段.

正如您在自我跟进中所述,您需要切换到text字段以获得您期望的结果.