2016-04-11 11 views
0

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“:

enter image description here

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)

+1

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

+0

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? –

+0

Vielleicht entferne ich die Indizierung der ID, weil ES die gleiche ID verwendet, um Dokumente zu vergleichen, also ist es redundant? –

Antwort

1

Die Werte sind unterschiedlich, da sie unabhängig für jeden Shard berechnet werden. See here für weitere Informationen.

Verwandte Themen