太阳黑子Solr,Rails和订购

时间:2012-01-12 09:18:43

标签: ruby-on-rails search solr sunspot sunspot-rails

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

感谢

1 个答案:

答案 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

现在我已经订购并进行了搜索......如果还有其他/更好的想法,那就让他们来吧!