【问题标题】:Sunspot Solr, Rails and OrderingSunspot Solr、Rails 和订购
【发布时间】:2012-01-12 09:18:42
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    好的,我通过将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 执行文本搜索了。 所以我在我的Project 模型中添加了一个虚拟属性name_number,而是在这个字段上进行搜索。

      def name_number
        "#{self.nr} - #{self.name[0..24]}"
      end
    

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

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多