Ich versuche meine ES-Ergebnisse nach 2 Feldern zu sortieren: durchsuchbar und Jahr.elasticsearch nach Ergebnis sortieren - dasselbe Feld suchbar, aber unterschiedlich?
Die Abbildung in meiner Rails-Anwendung:
# mapping
def as_indexed_json(options={})
as_json(only: [:id, :searchable, :year])
end
settings index: { number_of_shards: 5, number_of_replicas: 1 } do
mapping do
indexes :id, index: :not_analyzed
indexes :searchable
indexes :year
end
end
Die Abfrage:
@records = Wine.search(query: {match: {searchable: {query:params[:search], fuzziness:2, prefix_length:1}}}, sort: {_score: {order: :desc}, year: {order: :desc}}, size:100)
Das Interessante in der Abfrage:
sort: {_score: {order: :desc}, year: {order: :desc}}
ich denke, die Abfrage funktioniert gut mit die 2 Sortierparameter. Mein Problem ist das Ergebnis ist nicht das gleiche für 2 Dokumente mit dem gleichen Namen (durchsuchbares Feld).
Zum Beispiel, ich bin der Suche nach „Weingut“:
Sie können eine ganz andere Kerbe sehen, auch wenn das durchsuchbare Feld gleich ist. Ich denke, dass das Problem auf das ID-Feld zurückzuführen ist (es ist tatsächlich eine UUID). Sieht so aus, als ob dieses ID-Feld die Punktzahl beeinflusst. Aber in meinem Schema Mapping, schrieb ich, dass ID nicht analysiert werden sollte und in meiner ES-Abfrage, frage ich NUR in "durchsuchbaren" Feld, nicht in ID zu suchen.
Was habe ich vermisst, die gleiche Punktzahl für die gleichen Felder zu matchen? (Tatsächlich ist das Sortieren nach Jahr nach dem Wert nicht nützlich, da die Werte für gleiche Felder unterschiedlich sind)
Haben Sie versucht [erklären] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-explain.html)? Ich kann einen Hinweis geben, wie der Punktestand berechnet wird. – DrTyrsa
Nein. Ich kann es nicht erklären. Ich habe jedoch Tests gemacht: Wenn ich die ID aus 'as_json (nur: [: durchsuchbar,: Jahr]) 'entfernt habe, ist die Bewertung dieselbe. Ich bin mir sicher, dass die ID die Punktzahl ändert. Wie indexiere ich die ID, ohne die Wertung zu beeinflussen? –
Vielleicht entferne ich die Indizierung der ID, weil ES die gleiche ID verwendet, um Dokumente zu vergleichen, also ist es redundant? –