¿Cómo normalizo una puntuación solr / lucene?

Estoy tratando de averiguar cómo mejorar la puntuación de los resultados de búsqueda de solr. Mi aplicación necesita tomar el puntaje de los resultados de solr y mostrar una serie de "estrellas" dependiendo de cuán buenos sean los resultados para la consulta. 5 estrellas = casi / exacto hasta 0 estrellas, lo que significa que no coincide muy bien con la búsqueda, p. Ej. solo un elemento impacta. Sin embargo, obtengo puntajes de 1.4 a 0.8660254, ambos son resultados que le daría 5 estrellas. Lo que debo hacer es convertir estos resultados en un porcentaje para poder marcar estos resultados, con el número correcto de estrellas.

La consulta que ejecuto que me da la puntuación de 1.4 es:

euallowed: verdadero Y (grado: "2: 1")

La consulta que me da la puntuación de 0.8660254 es:

euallowed: verdadero Y (grado: "2: 1" O grado: "1er")

Ya he actualizado la similitud para que tf e idf devuelvan 1.0 ya que solo estoy interesado si un documento tiene un término, no el número de ese término en el documento. Así es como se ve mi código de similitud:

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;
    }
}

Entonces supongo que mis preguntas son:

¿Cuál es la mejor manera de normalizar el puntaje para poder calcular cuántas "estrellas" dar?

¿Hay otra forma de anotar los resultados?

Gracias

Conceder

Respuestas a la pregunta(3)

Su respuesta a la pregunta