Ich möchte Suchergebnisse von SOLR haben, die wie folgt lauten:
Alle Dokumente, die die gleiche Punktzahl haben, werden absteigend nach dem hinzugefügten Datum sortiert.
Also wenn ich solr abfrage, werde ich n Dokumente haben. In diesem Ergebnissatz gibt es Gruppen von Dokumenten mit demselben Ergebnis. Ich möchte, dass jede dieser Dokumentengruppen absteigend nach Datum hinzugefügt wird.
Ich entdeckte, dass ich dies mit Funktionsabfragen erreichen kann, genauer gesagt mit rord
function Ссылка , aber als es ist in der Dokumentation
WARNUNG: ab solr 1.4 können ord () und rord () zu viel Speicher verwenden da sie einen FieldCache-Eintrag auf dem Top-Level-Reader verwenden müssen, während Sortier- und Funktionsabfragen verwenden jetzt Einträge auf Segmentebene. Daher Sortieren oder Verwenden einer anderen Funktionsabfrage, zusätzlich zu ord () / rord () verdoppelt die Speicherbelegung.
verursacht übermäßigen Speicherverbrauch.
Welche anderen Optionen habe ich?
Ich dachte daran, recip(ms(NOW,startTime),1,1,0)
zu verwenden. Ist das der beste Ansatz?
Gibt es irgendwelche negativen Auswirkungen auf die Leistung, wenn ich recip und ms verwende?
Sie können mehrere SORT-Bedingungen verwenden:
Mehrere Sortierreihenfolgen können durch ein Komma getrennt werden, dh: sort = + [, +] ...
Also, in Ihrem Fall wäre: sort = score DESC, date_added DESC
Da Ihre Fragen sagen:
Alle Dokumente mit demselben Ergebnis werden absteigend sortiert nach Datum hinzugefügt.
Die andere Antwort ist perfekt.
Wie auch immer, ich würde Ihnen empfehlen, sicherzustellen, dass Sie das Datum nur nach einem Dokument mit demselben Ergebnis sortieren möchten. Nach meiner Erfahrung war das immer falsch. Tatsächlich ist der solr-Score nicht absolut, sondern nur relativ zu anderen Dokumenten, und jedes Dokument ist anders.
Daher würde ich nicht nach Partitur und dann noch nach etwas anderem sortieren, weil es schwer vorhersehbar ist, wann Sie für verschiedene Dokumente die gleiche Punktzahl erhalten.
Ich würde persönlich nur auf score
sortieren und eine Funktion verwenden, um neuere Dokumente zu verbessern. Sie können ein gutes Beispiel auf dem solr Wiki finden, die dort verwendete Funktion ist recip(ms(NOW,date_field),3.16e-11,1,1)
.
Wenn Sie sich Sorgen um die Leistung machen, können Sie versuchen, die Zeit für die Indexerhöhung zu erhöhen. Sehen Sie sich hier an.