Ich habe einen Solr-Index mit vielen Einträgen, und bei der Abfrage wird eine Teilmenge zurückgegeben - jeder Eintrag hat eine bestimmte Punktzahl (Offensichtlich). Sobald die Ergebnisse mit Scores zurückgegeben werden, möchte ich in der Lage sein, nur Ergebnisse zu "behalten", die über einem Score liegen (d. H. Nur Ergebnisse einer bestimmten Qualität). Ist es möglich, dies zu tun, wenn die zurückgegebene Teilmenge etwas sein könnte?
Ich frage, weil es so aussieht, als ob bei einigen Anfragen ein Wert von sagen wir 0,008 zu einem anständigen Match führt, während andere Anfragen einen höheren Score ergeben, was zu einem schlechten Match führt.
Idealerweise suche ich nur nach einer Methode, um die oberen x
-Einträge aufzunehmen, solange sie mindestens eine bestimmte Qualität haben.
Vielen Dank im Voraus!
Ich denke, du solltest das nicht tun. Mit dem TF-IDF-Bewertungsmodell gibt es keine Möglichkeit, eine Punktzahl zu berechnen, über der alle Ergebnisse relevant sind und umgekehrt. Und wenn Sie dies schaffen, ist es sehr wahrscheinlich, dass dieser Schwellenwert nach einigen Aktualisierungen Ihres Indexes nicht mehr gültig ist (weil sich die Dokumenthäufigkeiten ändern).
Wenn Sie das immer noch tun wollen, ist es meiner Meinung nach mit Funktionsabfragen erreichbar: Es gibt ein if
(in trunk) und ein query
Funktionen in Solr. Filtern Sie einfach Ihre Ergebnisse, so dass Sie nur Einträge behalten, die eine höhere Punktzahl als eine bestimmte Schwelle haben.
Sie können etwas implementieren, das als normalisierter Score bezeichnet wird ( Ergebnisse als Prozentwerte ).
Weitere Details finden Sie unter:
Wie normalisiert man die Lucene-Scores?
Wie normalisiere ich einen solr / lucene Score?
Entfernen Sie Ergebnisse unterhalb eines bestimmten Score-Schwellenwerts in Solr / Lucene?
Würde auch gerne zuerst ScoresAsPercentages durchgehen.
Solr normalisiert keine Scores, da dies leicht auf der Client-Seite durchgeführt werden kann.
Sie können den maxScore, der in den Ergebnissen zur Verfügung steht, verwenden, indem Sie alle Scores durch dividieren
maxScore.
Der erste Datensatz hat den Wert eins gefolgt vom Rest.