Sunspot Solr, rieles y pedidos
-
27-10-2019 - |
Pregunta
Tengo un modelo project
en mi aplicación rails 3.1 y quiero usar Solr para ejecutar una búsqueda en él.
Definí la búsqueda así:
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
El project-nr, en mi modelo llamado nr
, tipo integer, es la referencia más utilizada para encontrar un proyecto.
Ahora, además de tener un formulario de búsqueda, todavía quiero que mis proyectos estén ordenados por nr
cuando no se realizó ninguna búsqueda, pero esto no funciona - mi proyecto parece estar en un orden totalmente aleatorio.
El código de mi acción de índice ProjectsController se ve así:
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
Pero cuando visito myapp / projects obtengo un
Sunspot::UnrecognizedFieldError in ProjectsController#index
No field configured for Project with name 'nr'
error ...
alguna idea de lo que necesito hacer para ordenar por nr.?
gracias
Solución
Está bien, lo resolví convirtiendo el campo nr
en un número entero en mi búsqueda:
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
Ahora pude ordenarlo bien, pero ya no pude realizar una búsqueda de texto en project_nr.
Así que agregué un atributo virtual name_number
a mi modelo Project
y en su lugar busqué en este campo.
def name_number
"#{self.nr} - #{self.name[0..24]}"
end
Ahora tengo el pedido y la búsqueda en su lugar ... Si hay otras / mejores ideas, ¡sigan viniendo!