1

我的 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 订购。?

谢谢

4

1 回答 1

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

现在我已经订购和搜索了......如果还有其他/更好的想法,请继续关注!

于 2012-01-12T10:02:54.403 回答