Ich muss Facetten für meine App tun. Für den Moment möchte ich Facetten auf der Ergebnisseite nach der Suche erscheinen. Ich bin auf Schienen und sorry für mein schlechtes Englisch, ich bin Französisch.Wie Implantat Facetten mit elasticsearch auf Schienen
Ich habe 2 Modelle: Camping.rb und Caracteristiquetest.rb. Ich habe den Verein has_many/gehört_to gemacht. In caracteristiquestest, habe ich eine Spalte camping_id und andere String-Spalten "piscine" und "Barbecue".
Also, nach vielen Tests, fand ich eine Lösung, um einen Beitrag mit dem Wert "non" auf caracteristiquetest.barbecue (siehe nach) zu finden. Jetzt versuche ich dies auf App zu implantieren.
Ich habe einen Fehler:
C: /Sites/campsite/app/models/camping.rb: 66: Syntaxfehler, unerwartete ':', in der Erwartung => {caracteristiquetest.barbecue: " nicht "}}]^ C: /Sites/campsite/app/models/camping.rb: 66: Syntaxfehler, unerwartet '}', erwartet keyword_end {caracteristiquetest.barbecue:" non "}}]^ C: /Sites/campsite/app/models/camping.rb:85: Syntaxfehler, unerwartet Ende der Eingabe, erwartet keyword_end
Wie kann man das beheben? By the way, nach der Befestigung, wie kann ich dies auf meine Sicht implantieren? Ich möchte diese Funktion nach der Suche implantieren, damit der Benutzer "Grill" "Ja"/"Nein" filtern kann.
Danke für Ihre Hilfe.
_search mit head_plugin Elasticsearch Wenn ich diese laufen, ich habe das gute Ergebnis
{
"query": {
"bool": {
"must": [
{"term":
{"caracteristiquetest.barbecue": "non"}}]
}
}
}
campings_controller.rb
def homesearch
@campings = Camping.custom_search((params[:q].present? ? params[:q] : '*'))
end
#Page de résultats
def result
if params[:q].blank?
redirect_to action: :index and return
else
@campings = Camping.custom_search((params[:q].present? ? params[:q] : '*')).page(params[:page]).per(14).results
end
end
camping.rb
mapping do
indexes :name, boost: 8
indexes :adresse
indexes :commune, boost: 10
indexes :description
indexes :nomdep, boost: 10
indexes :nomregion, boost: 10
indexes :ville_id
indexes :region_id
indexes :departement_id
indexes :latitude
indexes :longitude
indexes :etoile
indexes :user_id
indexes :caracteristiquetest_id
#On implante les données du modèle supplémentaire
indexes :caracteristiquetests, type: 'nested' do
indexes :id, type: 'integer'
indexes :piscine, type: 'string'
indexes :barbecue, type: 'string'
indexes :camping_id, type: 'integer'
end
end
def as_indexed_json(options = {})
self.as_json(only: [:name, :adresse, :code_postale, :commune, :description, :nomdep, :nomregion, :latitude, :longitude, :etoile, :caracteristiquetest_id],
include: {caracteristiquetest: {only: [:id, :piscine, :barbecue, :camping_id]}})
end
class << self
def custom_search(query)
__elasticsearch__.search(query: multi_match_query(query), aggs: aggregations)
end
def multi_match_query(query)
{
multi_match: {
query: query,
type: "best_fields",
fields: ["name^6", "nomdep^10", "commune^8", "nomregion^7"],
operator: "and"
}
}
end
def aggregations
{
query: {
bool: {
must: [
{term:
{caracteristiquetest.barbecue : "non"}}]
}
}
}
end
end
homesearch.html.erb
<div class="container">
<div class="row">
<div class="search">
<%= form_tag(result_path, method: :get) %>
<%= text_field_tag :q, params[:q], class:"search-query form-control" %>
<%= submit_tag "GO", class:"btn btn-danger", name: nil %>
</div>
</div>
</div>
Sie versuchen '.facets' auf etwas zu nennen, die' nil' ist. In deinem Fall ist '@ camping'' nil'. Dies liegt wahrscheinlich daran, dass Sie sie niemals in der Controller-Aktion festlegen, die die Vorlage 'result.html.erb' rendert. Ich sehe, dass Sie "@ camping" in der Aktion "index", aber nicht in der Aktion "result" festlegen. –
@CarlosRamirezIII Du hast recht, es ist ein Fehler, ich vergesse das "s" zu @camping. Ich habe den Beitrag bearbeitet. Jetzt habe ich einen anderen Fehler undefinierte Methode 'Facetten 'für # –
nicolaswecandoit