我的rails 3.1应用程序中有一个project
模型,我想使用Solr对其进行搜索。
我定义了这样的搜索:
searchable do
text :nr, :boost => 5 # nr is integer
text :name, :boost => 5
text :description, :boost => 2
text :client do
client.name
end
text :tasks do
tasks.map(&:name)
end
end
project-nr,在我的模型中名为nr
,类型为整数,是查找项目最常用的参考。
现在除了有一个搜索表单,我仍然希望我的项目在没有执行搜索时由nr
排序,但这不起作用 - 我的项目似乎完全是随机的。
我的ProjectsController索引操作的代码如下所示:
def index
@search = Project.search do
fulltext params[:search]
paginate :page => params[:page]
order_by :nr, :desc
end
@projects = @search.results
#@projects = Project.active.visible.design.order("nr desc")
respond_to do |format|
format.html # index.html.erb
format.json { render json: @projects }
end
但是当我访问myapp / projects时,我得到了一个
Sunspot::UnrecognizedFieldError in ProjectsController#index
No field configured for Project with name 'nr'
错误...
任何想法我需要做什么来订购nr。 ?
感谢
答案 0 :(得分:0)
好的,我通过将nr
字段转换为可搜索的整数来解决它:
searchable do
integer :nr
text :name, :boost => 5
text :description, :boost => 2
text :client do
client.name
end
text :tasks do
tasks.map(&:name)
end
end
现在我能够很好地订购,但我无法在project_nr上执行文本搜索。
所以我在我的name_number
模型中添加了一个虚拟属性Project
,而是搜索了这个字段。
def name_number
"#{self.nr} - #{self.name[0..24]}"
end
现在我已经订购并进行了搜索......如果还有其他/更好的想法,那就让他们来吧!