Sunspot Solr, Rails e Ordering
-
27-10-2019 - |
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
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!