Sunspot Solr, рельсы и заказ

У меня есть модель project в моем приложении rails 3.1, и я хочу использовать 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

Номер проекта, в моей модели только что названный 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'

ошибка...

любые идеи, что мне нужно сделать, чтобы заказать по номеру. ?

Благодарность


person tmaximini    schedule 12.01.2012    source источник


Ответы (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

Теперь я смог красиво его упорядочить, но больше не мог выполнять текстовый поиск по номеру проекта. Поэтому я добавил виртуальный атрибут name_number к моей модели Project и вместо этого искал в этом поле.

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

Теперь у меня есть порядок и поиск на месте ... Если есть другие / лучшие идеи, продолжайте их придумывать!

person tmaximini    schedule 12.01.2012