2016-03-26 22 views
0

Ich habe eine Solr-Instanz mit variablen Produktpreisen, die eine Website-Suche antreibt. So suchen um ein Datum und Ergebnisse zeigen, auch wenn die genaue gewünschten Termin nicht verfügbar ist, verwenden wir eine Abfrage wie folgt:Solr Sortierung innerhalb der Gruppe nach Nähe

product_id: 759 AND arrival_date:[2016-05-20T00:00:00Z-3DAYS TO 2016-05-20T00:00:00Z+3DAYS] 

Die Ergebnisse sind grouped von product_id. Die Gruppierung erbt eine price asc Sortierreihenfolge von der Hauptabfrage.

Dies hat leider den negativen Nebeneffekt, dass immer Dokumente mit dem niedrigsten Preis zurückgegeben werden, unabhängig vom Datum, auch wenn das angeforderte Datum verfügbar ist.

Wie kann ich innerhalb einer Gruppe nach Nähe zu einem Datum sortieren?

Antwort

1

Verwenden Sie die group.sort=arrival_date desc

Alternativ, wenn Sie alle Ergebnisse sortiert werden soll, basierend auf dem Datum, an dem dann der Preis uns &sort=date desc,price asc

+0

Das erste in immer mit der 'date-3DAYS' sortiert werden würde, ich Ich habe Angst. – Lg102

+1

Es tut mir leid, ich habe deine Frage nicht richtig gelesen. Vielleicht können Sie versuchen, eine Boost-Abfrage zu verwenden, anstatt zu sortieren, um Ihre Ergebnisse zu sortieren. Etwas wie '{! Boost b = (recip (ms (arrival_date, 2016-05-20T00: 00: 00.000), 2.592e-9,1,1))} product_id: 759 AND arrival_date: [2016-05-20T00: 00: 00.000-3DAYS TO 2016-05-20T00: 00: 00.000 + 3DAYS] '. Ich bin mir nicht sicher, ob das funktionieren wird, da ich es nicht ausprobiert habe, aber Sie könnten es versuchen und das Ergebnis veröffentlichen. Abgeholt von [hier] (https://wiki.apache.org/solr/FunctionQuery#Date_Boosting) –

+0

Das hat nicht direkt funktioniert, aber es brachte mich auf den richtigen Weg! Die von Ihnen beschriebene Boost-Funktion kann mit 'eDisMax' verwendet werden. Ich werde mehr Ergebnisse veröffentlichen, wenn ich mit der Implementierung fertig bin. – Lg102

Verwandte Themen