Explicación detallada del mecanismo de puntuación de búsqueda elástica
Tome la consulta como entrada y finalmente combine varios factores mediante una fórmula para devolver la puntuación final del documento. Este proceso de consideración integral es un proceso de consideración que prioriza los documentos relevantes.
Elasticsearch se basa en Lucene, por lo que su mecanismo de puntuación también se basa en Lucene. En Lucene, esta correlación se denomina puntuación y el proceso de determinar la relevancia de un documento para una consulta se denomina puntuación.
Los modelos de puntuación más utilizados en ES son TF/IDF y BM25. TF-IDF pertenece al modelo de espacio vectorial y BM25 pertenece al modelo de probabilidad, pero las fórmulas de puntuación de los dos no son muy diferentes. Todos utilizan un producto del método IDF y el método TF para definir el peso de una sola palabra y luego agregan el peso de la palabra que coincide con la consulta como la puntuación de todo el documento.
Antes de ES 5.0, se usaba el algoritmo TF/IDF, y después de ES 5.0, se usaba el método BM25 de forma predeterminada.
Puntuación de relevancia: En pocas palabras, calcula el grado de coincidencia relevante entre el texto de un índice y el texto de búsqueda.
La lista de documentos que coinciden con la declaración de la consulta se puede obtener a través del índice invertido. Entonces, ¿cómo colocar en la parte superior los documentos que mejor satisfacen las necesidades de consulta del usuario?
La esencia es un problema de clasificación, y la base de la clasificación es la puntuación relevante.
Elasticsearch utiliza el algoritmo de frecuencia $TERM/frecuencia de documento inversa, conocido como algoritmo TF/IDF. Frecuencia de términos de TF ($Frecuencia de términos), frecuencia de documentos inversos IDF (frecuencia de documentos inversos IDF)
Varios conceptos importantes de puntuaciones de correlación son los siguientes:
Actualmente, las puntuaciones de correlación de expertos sistemas Hay dos tipos principales de modelos:
La fórmula IDF en BM25 es:
No hay ningún 1 en el registro original de BM25. Lucene realiza una pequeña optimización para evitar valores negativos. Aunque la fórmula ha sido modificada, en realidad no existe ninguna diferencia sustancial con respecto a la fórmula original. La siguiente es una comparación de las curvas de función antiguas y nuevas:
La fórmula de TF en BM25 es:
donde tf es el valor de frecuencia de palabras tradicional. Echemos un vistazo a la comparación de las curvas de función antes y después de la mejora (k = 1,2 en la figura siguiente):
Se puede ver que en la fórmula tradicional para calcular tf, cuanto mayor es la palabra frecuencia, mayor será el valor tf y no hay límite superior. Sin embargo, a medida que aumenta la frecuencia de las palabras, el valor de tf en BM será infinitamente cercano a (k+1), lo que equivale a un límite superior. Ésta es la diferencia entre los dos. Generalmente, K es 1,2 y Lucene también utiliza 1,2 como valor predeterminado de K.
En la fórmula tradicional, también hay una especificación. BM25 agrega este factor a la fórmula de cálculo de TF. La fórmula TF de BM25 combinada con el factor norma es:
En comparación con antes, un multiplicador (1.0?b+b?L)(1.0?b The. La fórmula de cálculo de +b? l).l es:
donde |d| es la longitud del documento actual y avgDl es la longitud promedio de todos los documentos del corpus.
b es una constante utilizada para controlar el impacto de L en la puntuación total. Generalmente, se necesita un número entre 0 y 1 (tomar 0 significa ignorar completamente L). El valor predeterminado de b en Lucene es 0,75.
A través de estas mejoras detalladas, BM25 funciona mejor que el TF-IDF tradicional en muchos escenarios reales, por lo que a partir de la versión Lucene 6.0.0, BM25 se ha convertido en el algoritmo de puntuación de similitud predeterminado.
En el ejemplo anterior, el modelo de puntuación se especifica mediante el atributo de similitud y se utilizan los siguientes tres parámetros:
Si queremos utilizar un modelo de puntuación específico y queremos aplicarlo Para todo el mundo, agregue:
El impulso puede controlar artificialmente la proporción de un campo en el proceso de puntuación. Hay dos tipos:
Puede cambiar el peso de puntuación de un campo durante la indexación configurando el parámetro boost en el mapeo:
Cabe señalar que los documentos modificados durante la indexación se almacenan en impulso en el índice. Si se desea modificar la promoción, se debe reindexar el documento.
Una vez que se completa el mapeo, todos los campos de nombre tendrán automáticamente un valor de impulso, que se almacenará en la estructura de índice interna de Lucene con un valor de precisión reducido. Solo se utiliza un byte para almacenar el valor de punto flotante (se perderá precisión si no se puede guardar), lo que puede provocar una pérdida de precisión al calcular la puntuación final del documento.
Además, el impulso se aplica a la terminología. Por lo tanto, si coinciden varias entradas en un campo que ha sido mejorado, significa que el aumento se calcula varias veces, lo que aumentará aún más el peso del campo y puede afectar la puntuación final del documento.
Impulsar durante la consulta puede evitar los problemas anteriores.
Casi todos los tipos de consultas admiten el impulso, por ejemplo:
En términos de puntuación final, las consultas de nombres con impulso son más influyentes. Sólo en consultas bool el impulso tiene más sentido.
Boost también se puede utilizar para consultas multi_match.
Además, podemos usar una sintaxis especial para especificar solo un impulso para un campo específico. Agregando un símbolo y aumentando el valor después del nombre del campo. Dígale a ES que mejore ese campo:
En el ejemplo anterior, el campo de título se amplía 3 veces.
Cabe señalar que cuando se utiliza el impulso, los campos y las entradas se mejoran en función de valores relativos en lugar de multiplicadores. Si aumenta el mismo valor para todas las palabras buscadas, parece que no hay ningún aumento. Porque Lucene normalizará el valor de impulso. Si el impulso es 4 veces un campo, no significa que la puntuación del campo se multiplique por 4.
El proceso de puntuación detrás de ES es más complicado de lo que pensábamos. A veces, los resultados de la consulta pueden diferir de lo que esperamos. En este momento, puede pedirle a ES que explique los detalles de la puntuación mediante explicación.
Debido a que los resultados son demasiado largos, los filtramos aquí ("tamaño":1 devuelve un documento) y solo miramos los campos especificados ("fuente":"nombre" solo devuelve el campo de nombre) .
En el campo _ explicación recién agregado, puedes ver que el valor es 0.9331132, entonces, ¿cómo se calcula?
La palabra primavera aparece 1 vez en el campo de descripción (nombre), por lo que la puntuación completa de TF se calcula mediante "descripción": "TF, calculado como freq/(freq+k 1 *( 1- b+b * dl/avgdl))from: "".
¿Qué pasa con la frecuencia inversa de palabras del documento? Según "IDF", se calcula como Log(1+(n-n+0.5) / (n+0.5))De:"La puntuación calculada es 0.98082924.
Cabe señalar que la función de explicación generará una sobrecarga de rendimiento adicional para ES y generalmente solo se usa durante la depuración.
Cabe señalar que la función de explicación generará una sobrecarga de rendimiento adicional para ES.
p>Al buscar, debe confiar en el índice invertido al ordenar, debe confiar en el ortográfico; índice para ver cada campo de cada documento y luego ordenar. El llamado índice ortográfico es en realidad el valor del documento. /p>
Al crear un índice, por un lado, se creará un índice invertido para la búsqueda; por otro lado, creará un índice positivo, es decir, el valor del documento, que se utiliza para ordenar, agregar, filtrar y otras operaciones.
El valor del documento se guarda en el disco. , si hay suficiente memoria, el sistema operativo la almacenará en caché automáticamente y el rendimiento seguirá siendo alto. Si no hay suficiente memoria, el sistema operativo la escribirá en el disco. está habilitado de forma predeterminada y se puede desactivar al crear un índice. Si desea activar DocValues más tarde, debe volver a indexar
/elastic search/guide/current/ scoring-theory. .html
blogs.com/Neeo/articles/10721071.html
blogs.com/jpfss/p/10775376.html
/p /27951938