我以为我有这个蛋糕..但是无论何时我对任何关键字进行查询都不会从SQL加载任何表。我没有错。
user.rb
searchable do
string :first_name
string :last_name
string :name
string :email
time :created_at
end
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
然后我跑了:
$> script/console
$> User.reindex
当我完全不进行搜索时..成功显示所有User
结果
我相信我要将所有这些字符串标记转换为文本标记,但会返回此错误:
Sunspot::UnrecognizedFieldError in Admin/usersController#index
No field configured for User with name 'first_name'
为了回复关键字,我缺少什么?
答案 0 :(得分:12)
(对您自己的自我跟进的更完整的解释。)
关于您的设置:
searchable do
string :first_name
string :last_name
string :name
string :email
time :created_at
end
Solr中的字符串旨在用于完全匹配。它不像文本列那样进行预处理或标记。这些文字匹配用于过滤(“category_name等于'Sale'”),分面,排序等。
您更可能需要text
个字段。文本字段使用Standard Tokenizer进行标记,使用LowerCase Filter进行小写,并使用Standard Filter删除其点和撇号以及许多其他可能的选项。
当人们想到Solr全文搜索的功能时,他们会考虑如何处理text
字段。
此外,默认情况下,Sunspot的keywords
搜索方法会针对您的所有文本字段进行搜索,这解释了当您添加keywords
时未获得结果的原因 - 您的文档没有要搜索的文本字段对
正如您在自我跟进中所述,您需要切换到text
字段才能获得您期望的结果。
答案 1 :(得分:2)
这不是最好的答案,但我发现将字符串和文本标签组合在一起起作用。所以我的用户模型看起来像这样:
searchable do
text :first_name
text :last_name
text :name
text :email
time :created_at
string :first_name
string :last_name
string :name
string :email
end