2011-11-23 10 views
8

Tengo un índice de Solr con muchas entradas y, tras la consulta, se devuelve un subconjunto; cada entrada tiene una puntuación, (Obvio). Una vez que los resultados se devuelven con puntajes, quiero poder "mantener" solo los resultados que están por encima de un puntaje (es decir, resultados de una determinada calidad solamente). ¿Es posible hacer esto cuando el subconjunto devuelto podría ser algo?¿Es posible establecer un umbral de Solr Score "razonablemente", independientemente de los resultados devueltos? (es decir, la puntuación de Solr está estandarizada de alguna manera)

Lo pido porque parece que en algunas consultas una puntuación de 0,008 resulta en una coincidencia decente, mientras que en otras consultas una puntuación más alta da como resultado una mala coincidencia.

Lo ideal es que estoy buscando un método para tomar las mejores entradas de x, siempre que sean de al menos cierta calidad.

¡Gracias de antemano!

+0

Ver también: http://stackoverflow.com/questions/5379176/how-to-normalize-lucene -scores http://stackoverflow.com/questions/3986220/how-do-normalization-a-solr-lucene-score http://stackoverflow.com/questions/2871558/remove-results-below-a-certain -score-threshold-in-solr-lucene/15765203 – kenorb

Respuesta

4

Creo que no deberías hacer esto. Con el modelo de puntuación TF-IDF, no hay forma de calcular una puntuación por encima de la cual todos los resultados son relevantes y viceversa. Y si logra hacer esto, es muy probable que este umbral ya no sea válido después de algunas actualizaciones en su índice (porque las frecuencias de los documentos cambiarán).

Si aún desea hacer esto, creo que es posible utilizar las consultas de función: hay un if (en el maletero), y un query funciones disponibles en Solr. Simplemente filtre sus resultados para que solo conserve las entradas que tienen una puntuación más alta que un umbral determinado.

+0

+1 por "... co mpute un puntaje por encima del cual todos los resultados son relevantes " – aitchnyu

+0

¡Gracias !, ¿tiene un método recomendado para" tamizar "los mejores resultados? Algo parecido a la solución de @Jayendra de dividir por maxScore. – csjohn

+0

No tengo uno, porque no hay una buena manera de hacerlo. Incluso reescribiendo puntajes como porcentajes, obtendrás resultados engañosos. Sin embargo, si está utilizando consultas disyuntivas puras, podría interesarle el parámetro 'mínimo debe coincidir' de (E) DisMaxQueryParser, que le permite asegurarse de que, por ejemplo, al menos el 75% de las cláusulas debe coincidir con un documento para ser incluido en los resultados. – jpountz

2

También quisiera pasar primero por ScoresAsPercentages.

Solr no normaliza las puntuaciones, ya que puede hacerse fácilmente en el lado del cliente.
puede usar el maxScore que se proporciona en los resultados, al dividir todos los puntajes por maxScore.
El primer registro tendrá el puntaje de uno seguido del resto.

+0

He leído el documento ScoresAsPercentages antes, y son una gran sugerencia para no hacer tal cosa. ¿Cómo te sientes dividiendo por maxScore "funciona"? Es decir, ¿proporciona una comparación significativa de los resultados, o no es genial? Gracias por la respuesta. – csjohn

+0

Dividiendo por maxscore debería poder filtrar los resultados y clasificarlos. sin embargo, aún no garantizará que el documento con el maxscore sea relevante. – Jayendra

Cuestiones relacionadas