Sunspot Solr, Rails e Ordenação
-
27-10-2019 - |
Pergunta
Eu tenho um modelo project
em meu aplicativo Rails 3.1 e quero usar o Solr para fazer uma pesquisa nele.
Eu defini a pesquisa assim:
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
O project-nr, em meu modelo chamado apenas nr
, tipo integer, é a referência mais usada para encontrar um projeto.
Agora, além de ter um formulário de pesquisa, eu ainda quero meus projetos ordenados pelo nr
quando nenhuma pesquisa foi realizada, mas isso não funciona - meu projeto parece estar em uma ordem totalmente aleatória.
O código da minha ação de índice ProjectsController se parece com este:
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
Mas quando visito myapp / projects, recebo um
Sunspot::UnrecognizedFieldError in ProjectsController#index
No field configured for Project with name 'nr'
erro ...
todas as ideias que preciso fazer para pedir pelo nr.?
obrigado
Solução
Ok, resolvi transformando o campo nr
em um número inteiro em meu pesquisável:
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
Agora consegui fazer o pedido de maneira adequada, mas não consegui mais realizar uma pesquisa de texto no project_nr.
Então, adicionei um atributo virtual name_number
ao meu modelo Project
e, em vez disso, pesquisei neste campo.
def name_number
"#{self.nr} - #{self.name[0..24]}"
end
Agora eu tenho pedidos e pesquisas no lugar ... Se houver outras / melhores ideias, continue vindo!