2011-03-21 27 views
8

necesito para normalizar las puntuaciones de Lucene entre 0 y 1.¿Cómo normalizar las puntuaciones de Lucene?

Por ejemplo, una consulta al azar devuelve los siguientes resultados ...

8.864665 
2.792687 
2.792687 
2.792687 
2.792687 
0.49009037 
0.33730242 
0.33730242 
0.33730242 
0.33730242 

Cuál es la mayor puntuación? 10.0?

gracias

Respuesta

8

Es posible dividir todas las puntuaciones con la puntuación máxima a obtener puntuaciones entre 0 y 1.

Sin embargo, tenga en cuenta que las puntuaciones normalizadas deben ser utilizados para comparar los resultados de un único consulta solo No es correcto comparar los puntajes (normalizados o no) de los resultados de 2 consultas diferentes.

+0

@ nikhil500 realmente? Entonces, si tengo muchas consultas, ¿cómo puedo ver cuáles funcionan mejor? – aneuryzm

+0

Por favor, publique algunos más detalles de cómo (y por qué) quiere comparar los resultados de múltiples consultas. Los puntajes en las consultas no son directamente comparables, pero dependiendo de su problema exacto, podemos encontrar alguna solución. – nikhil500

+0

@ nikhil500 Mi problema es que para cada consulta tengo que combinar varias puntuaciones (procedentes de otro software) y todas están normalizadas (entre 0 y 1), excepto para las puntuaciones de Lucene. – aneuryzm

5

No hay una buena manera estándar para normalizar las puntuaciones con Lucene. Lea esto: ScoresAsPercentages y este explanation

En su caso, el puntaje más alto es el puntaje del primer resultado, si los resultados están ordenados por puntaje. Pero este puntaje será diferente para cada consulta.

Ver también how-do-i-normalise-a-solr-lucene-score

+0

Mi problema es que tengo puntajes lucene + otros puntajes (no relacionados con Lucene) para cada resultado de búsqueda. Los otros puntajes están todos normalizados entre 1 y 0. Si no normalizo los puntajes de Lucene de la misma manera, tendré resultados desequilibrados ... – aneuryzm

+0

Eche un vistazo a http://lucene.apache.org/java /2_9_2/api/core/org/apache/lucene/search/Collector.html clase. Puede que tenga que escribir su propio Coleccionista. Tal vez usando tus otros puntajes, o una combinación. – morja

1

No hay puntaje máximo en Solr, depende de demasiadas variables, por lo que no se puede predecir.

Pero puede implementar algo llamado puntuación normalizada (Scores As Percentages) que no es recomendable.

enlaces Relacionados para más detalles:

Is it possible to set a Solr Score threshold 'reasonably', independent of results returned? (i.e. Is Solr Scoring standardized in any way)

how do I normalise a solr/lucene score?

Remove results below a certain score threshold in Solr/Lucene?

0

una normalización regulares sólo le ayudará a comparar la distribución de puntuación entre consultas (y la de ellos recuperados listas) . No se puede simplemente normalizar el puntaje para comparar el rendimiento entre las consultas. Piense en una consulta que todos los documentos recuperados sean muy relevantes y reciban el mismo (puntaje alto) y en otra consulta que la lista recuperada incluya un documento relevante de cebada (nuevamente, con el mismo puntaje) ahora, sin importar la consulta normalización que haces - la puntuación normalizada será la misma.

Debe pensar en un factor de consulta cruzada que pueda llevar todas las puntuaciones al mismo nivel.

Por ejemplo - tal vez similitud entre la consulta y todo el índice, y el uso que la puntuación de alguna manera junto con el documento puntuación

0

Si desea comparar dos o más consultas de cálculo, encontré una solución. Puede comparar su documento con la puntuación más alta con su término de consulta utilizando la LevenstheinDistance o LuceneLevenstheinDistance (Damerau) clase para obtener la distancia entre su queryterm y su resultado. El resultado es la similiaridad entre ellos. Haga esto para cada consulta que quiera comparar. Ahora tiene una herramienta para comparar sus consultas utilizando la similitud de su querytherm y su resultado más elevado.Ahora puede elegir la consulta con el puntaje más alto de similitud y usar esto para las próximas acciones apropiadas.

//Damerau LevenstheinDistance 
    LuceneLevenshteinDistance d = new LuceneLevenshteinDistance(); 

    similiarity = d.getDistance(queryterm, yourResult); 
Cuestiones relacionadas