Sunspot Solr, Rails und Bestellung
-
27-10-2019 - |
Frage
Ich habe ein project
-Modell in meiner Rails 3.1-Anwendung und möchte Solr verwenden, um eine Suche darauf durchzuführen.
Ich habe die Suche folgendermaßen definiert:
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
Das Projekt-nr, in meinem Modell nur nr
, Typ Integer genannt, ist die am häufigsten verwendete Referenz zum Suchen eines Projekts.
Jetzt möchte ich neben einem Suchformular meine Projekte immer noch nach dem nr
sortieren, wenn keine Suche durchgeführt wurde, aber das funktioniert nicht - mein Projekt scheint in völlig zufälliger Reihenfolge zu sein.
Der Code meiner ProjectsController-Indexaktion sieht folgendermaßen aus:
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
Aber wenn ich dann meine App / Projekte besuche, bekomme ich eine
Sunspot::UnrecognizedFieldError in ProjectsController#index
No field configured for Project with name 'nr'
Fehler ...
Ideen, was ich tun muss, um bis nr zu bestellen.?
danke
Lösung
Okay, ich habe es gelöst, indem ich das Feld nr
in eine Ganzzahl in meiner Suche umgewandelt habe:
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
Jetzt konnte ich es gut bestellen, aber ich konnte keine Textsuche mehr für project_nr durchführen.
Also habe ich meinem name_number
-Modell ein virtuelles Attribut Project
hinzugefügt und stattdessen in diesem Feld gesucht.
def name_number
"#{self.nr} - #{self.name[0..24]}"
end
Jetzt muss ich bestellen und suchen ... Wenn es andere / bessere Ideen gibt, kommen Sie weiter!