Domanda

Ho un modello project nella mia applicazione rails 3.1 e desidero utilizzare Solr per eseguire una ricerca su di esso.

Ho definito la ricerca in questo modo:

  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

Il project-nr, nel mio modello chiamato semplicemente nr, di tipo integer, è il riferimento più utilizzato per trovare un progetto.

Ora, oltre ad avere un modulo di ricerca, voglio ancora che i miei progetti siano ordinati dal nr quando non è stata eseguita alcuna ricerca, ma questo non funziona: il mio progetto sembra essere in ordine totalmente casuale. Il codice della mia azione sull'indice di ProjectsController è simile a questo:

  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

Ma quando visito myapp / projects ottengo un

Sunspot::UnrecognizedFieldError in ProjectsController#index

No field configured for Project with name 'nr'

errore ...

qualche idea su cosa devo fare per ordinare entro il nr.?

grazie

È stato utile?

Soluzione

Ok, l'ho risolto trasformando il campo nr in un numero intero nella mia ricerca:

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

Ora ero in grado di ordinarlo bene ma non potevo più eseguire una ricerca di testo su project_nr. Quindi ho aggiunto un attributo virtuale name_number al mio modello Project e invece ho cercato in questo campo.

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

Ora ho l'ordine e la ricerca in atto ... Se ci sono altre / idee migliori, continuate a farle arrivare!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top