tutorial features example lucene solr

lucene - features - solr tutorial



¿Eliminar los resultados por debajo de un determinado umbral de puntuación en Solr/Lucene? (3)

Podría escribir su propio recopilador que ignoraría la recopilación de aquellos documentos que el anotador coloque por debajo de su umbral. A continuación se muestra un ejemplo simple de esto usando Lucene.Net 2.9.1.2 y C #. Tendrá que modificar el ejemplo si desea mantener el puntaje calculado.

using System; using System.Collections.Generic; using Lucene.Net.Index; using Lucene.Net.Search; public class ScoreLimitingCollector : Collector { private readonly Single _lowerInclusiveScore; private readonly List<Int32> _docIds = new List<Int32>(); private Scorer _scorer; private Int32 _docBase; public IEnumerable<Int32> DocumentIds { get { return _docIds; } } public ScoreLimitingCollector(Single lowerInclusiveScore) { _lowerInclusiveScore = lowerInclusiveScore; } public override void SetScorer(Scorer scorer) { _scorer = scorer; } public override void Collect(Int32 doc) { var score = _scorer.Score(); if (_lowerInclusiveScore <= score) _docIds.Add(_docBase + doc); } public override void SetNextReader(IndexReader reader, Int32 docBase) { _docBase = docBase; } public override bool AcceptsDocsOutOfOrder() { return true; } }

¿Hay funcionalidades integradas en solr / lucene para filtrar los resultados si caen por debajo de un determinado umbral de puntuación? Digamos que si proporciono un umbral de puntuación de .2, todos los documentos con puntaje inferior a .2 se eliminarán de mis resultados. Mi intuición es que esto es posible actualizando / personalizando solr o lucene.

¿Podrías dirigirme en la dirección correcta sobre cómo hacer esto?

¡Gracias por adelantado!


Se llama puntuación normalizada ( puntajes como porcentajes ).

Puede usar los siguientes parámetros para lograr eso:

ns = {!func}product(scale(product(query({!type=edismax v=$q}),1),0,1),100) fq = {!frange l=20}$ns

Donde 20 es su umbral de 20%.

Relacionado: ¿cómo normalizo una puntuación solr / lucene?

No recomendaría hacer esto porque los valores absolutos de puntuación en Lucene no son significativos (p. Ej., Los puntajes no son directamente comparables en todas las búsquedas). La relación entre un puntaje y el puntaje más alto devuelto es significativo, pero no hay una calibración absoluta para el puntaje más alto devuelto, al menos en la actualidad, por lo que no hay forma de determinar a partir de los puntajes cuál es la calidad del conjunto de resultados en general. . Hay varios enfoques para mejorar esto que se han discutido (haciendo que los puntajes sean más directamente comparables codificando información adicional en el puntaje y usándola para la normalización, o probablemente mejor, generalizando el puntaje a un objeto que contiene múltiples piezas de información; el número total de términos de consulta que coinciden con el resultado superior si usa el valor predeterminado O sería bastante útil). Ninguna de estas ideas se implementa aún, hasta donde yo sé. - @Chuck

Fuente: RE: limitación de visitas con un umbral de puntuación

Relacionado: Re: Una pregunta sobre la función de puntuación en Lucene


Solo una actualización para cualquiera que tropiece aquí: Lucene ha proporcionado un EarlyTerminatingSortCollector y ya no es necesario crear un recopilador personalizado para esto. Envuélvalo sobre TopDocsCollector (en el caso específico de OP, TopScoreDocCollector ) para lograr la tarea dada.

EarlyTerminatingSortCollector

Un recopilador que finaliza antes la recopilación de documentos por segmento, si el segmento se ordenó de acuerdo con la clasificación dada.

TopDocsCollector

Una clase base para todos los recopiladores que devuelven una salida TopDocs. Este recopilador permite una extensión fácil al proporcionar un único constructor que acepta un PriorityQueue así como miembros protegidos para esa cola de prioridad y un contador del número total de visitas.