wie normalisiere ich einen Solr / Lucene-Score?

Ich versuche herauszufinden, wie die Bewertung von Suchergebnissen verbessert werden kann. Meine Anwendung muss die Punktzahl aus den solr-Ergebnissen entnehmen und eine Anzahl von „Sternen“ anzeigen, je nachdem, wie gut die Ergebnisse für die Abfrage sind. 5 Sterne = fast / genau bis auf 0 Sterne, was bedeutet, dass die Suche nicht sehr gut passt, z. nur ein Element trifft. Allerdings erhalte ich Punkte von 1,4 bis 0,8660254, beide liefern Ergebnisse, denen ich 5 Sterne geben würde. Ich muss diese Ergebnisse irgendwie auf einen Prozentsatz bringen, damit ich sie mit der richtigen Anzahl von Sternen kennzeichnen kann.

Die Abfrage, die ich ausführe und die mir die 1,4 Punkte gibt, lautet:

euallowed: true AND (Note: "2: 1")

Die Abfrage, die mir die Punktzahl 0.8660254 gibt, lautet:

euallowed: true AND (Note: "2: 1" ODER Note: "1st")

Ich habe die Ähnlichkeit bereits aktualisiert, sodass tf und idf 1.0 zurückgeben, da ich nur interessiert bin, wenn ein Dokument einen Begriff enthält, nicht die Nummer dieses Begriffs im Dokument. So sieht mein Ähnlichkeitscode aus:

import org.apache.lucene.search.Similarity;

public class StudentSearchSimilarity extends Similarity {

    @Override
    public float lengthNorm(String fieldName, int numTerms) {
        return (float) (1.0 / Math.sqrt(numTerms));
    }

    @Override
    public float queryNorm(float sumOfSquaredWeights) {

        return (float) (1.0 / Math.sqrt(sumOfSquaredWeights));

    }

    @Override
    public float sloppyFreq(int distance) {
        return 1.0f / (distance + 1);
    }

    @Override
    public float tf(float freq) {
        return (float) 1.0;
    }

    @Override
    public float idf(int docFreq, int numDocs) {

        //return (float) (Math.log(numDocs / (double) (docFreq + 1)) + 1.0);
        return (float)1.0;

    }

    @Override
    public float coord(int overlap, int maxOverlap) {
        return overlap / (float) maxOverlap;
    }
}

So nehme ich an, meine Fragen sind:

Wie kann ich die Punktzahl am besten normalisieren, um herauszufinden, wie viele „Sterne“ ich vergeben soll?

Gibt es eine andere Möglichkeit, die Ergebnisse zu bewerten?

Vielen Dan

Gewähre