features - solr vs elasticsearch 2018
¿Solr utiliza similitud coseno? (2)
He escrito un pequeño motor de búsqueda como mi proyecto semanal. Se basa en la similitud del coseno entre el vector de consulta y el vector de documento. El vector es calcular el uso de llagas tf-idf de tokens.
He llegado a conocer Apache Solr, que es un motor de búsqueda de texto completo. Mi pregunta es si Solr usa similitud de coseno internamente cuando los resultados de búsqueda de rango?
Sí, Solr (que se ejecuta en la parte superior de Lucene) usa similitud de Coseno. De la documentación de Lucene:
El puntaje VSM del documento d para la consulta q es la similitud cosina de los vectores de consulta ponderados V (q) y V (d)
similitud de coseno (q, d) = V (q) · V (d) / | V (q) | | V (d) |
https://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html
No. Solr usa algo similar a la similitud del coseno, pero no es lo mismo: hay algunas diferencias clave.
Si visita ese mismo enlace ( https://lucene.apache.org/core/4_10_0/core/org/apache/lucene/search/similarities/TFIDFSimilarity.html ) y sigue desplazándose hacia abajo, verá "Fórmula de puntuación conceptual Lucene" "y" Fórmula de puntuación práctica de Lucene "que brindan más detalles.
Ignorando los aumentos de índice / tiempo de consulta, las siguientes son algunas diferencias clave:
1. Diferente factor de normalización del documento
En lugar de normalizar cada documento según la norma euclidiana de su vector tf-idf, utiliza "doc-len-norma". Para la medida de similitud predeterminada (DefaultSimilairty) esto es solo 1 / sqrt (número de términos en el documento) que básicamente equivale a 1 / sqrt (sum (tf)), es decir, donde tf es la suma de los recuentos de términos en el documento - no se incluye la cuadratura como con la norma euclidiana y la IDF para cada término. Además, este valor se redondea a un byte para ahorrar espacio. Con mayor frecuencia, esto tendrá un valor diferente al factor de normalización utilizado para la similitud del coseno.
2. Incremento de "coord" adicional
También hay un valor adicional multiplicado en el puntaje igual a: el número de términos de consulta coincidentes en el documento / el número total de términos en la consulta.
Esto proporciona un impulso adicional para los campos (documentos) que coinciden con la mayoría de los términos de la consulta, y puede ser de valor cuestionable. Esto esencialmente está multiplicando la puntuación del vector tf-idf por otro producto interno: el producto interno de estos vectores se convierte en vectores booleanos (0 si no tiene el término dado, 1 si lo hace) con el vector de consulta solo normalizado por su Euclidiana norma.