En esta página, se describe cómo clasificar los resultados de la búsqueda para búsquedas en el texto completo en Spanner
Spanner admite el cálculo de una puntuación de novedad, lo que proporciona un y un componente básico para crear funciones de clasificación sofisticadas. Estas puntuaciones Calcular la relevancia de un resultado para una consulta en función del término de consulta frecuencia y otras opciones personalizables.
El siguiente ejemplo muestra una búsqueda clasificada:
SELECT AlbumId
FROM Albums
WHERE SEARCH(AlbumTitle_Tokens, @p)
ORDER BY SCORE(AlbumTitle_Tokens, @p) DESC
Califica los términos de búsqueda con la función SCORE
El SCORE
calcula una puntuación para cada término de consulta y, luego, combina las
de rendimiento. La puntuación por término se basa, aproximadamente, en la frecuencia del término: documento inverso
(TF/IDF). La puntuación es
un componente del orden final para un registro. La consulta la combina con
de otros indicadores, como la actualidad modula la puntuación de novedad.
En la implementación actual, la parte del IDF de TF/IDF solo está disponible cuando
enhance_query=>true
está en uso. que calcula la frecuencia relativa de las palabras
en función de todo el corpus web que usa la Búsqueda de Google, en lugar de un
un índice de búsqueda específico. Si no está habilitada la mejora de la consulta, la puntuación solo usa el componente de frecuencia del término (TF) (es decir, el término IDF se establece en 1).
Por lo general, la opción enhance_query
es la misma en ambas plataformas de SEARCH
.
y las funciones SCORE
.
La función SCORE
devuelve valores que sirven como puntuaciones de relevancia que
Spanner usa para establecer un orden de clasificación. No tienen configuración
significado. Cuanto más alta es la puntuación, mejor coincide con la consulta.
Asigna puntuaciones a varias columnas
Spanner usa la función SCORE
para puntuar cada campo
individualmente. Luego, la consulta combina estas puntuaciones individuales. Un problema común
de hacer esto es sumar las puntuaciones individuales y, luego, aumentarlas
de acuerdo con los pesos de los campos proporcionados por el usuario (que se proporcionan mediante consulta en SQL
parámetros).
Por ejemplo, la siguiente consulta combina el resultado de dos funciones SCORE
:
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)
ORDER BY SCORE(Title_Tokens, @p1) * @titleweight + SCORE(Studio_Tokens, @p2) * @studioweight
LIMIT 25
En el siguiente ejemplo, se agregan dos parámetros de mejora:
- La actualización (
FreshnessBoost
) aumenta la puntuación con(1 + @freshnessweight * GREATEST(0, 30 - DaysOld) / 30)
. - La popularidad(
PopularityBoost
) aumenta la puntuación al multiplicarla por factor(1 + IF(HasGrammy, @grammyweight, 0)
.
Para facilitar la lectura, la consulta usa el operador WITH
.
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1) AND SEARCH(Studio_Tokens, @p2)
ORDER BY WITH(
TitleScore AS SCORE(Title_Tokens, @p1) * @titleweight,
StudioScore AS SCORE(Studio_Tokens, @p2) * @studioweight,
DaysOld AS (UNIX_MICROS(CURRENT_TIMESTAMP()) - ReleaseTimestamp) / 8.64e+10,
FreshnessBoost AS (1 + @freshnessweight * GREATEST(0, 30 - DaysOld) / 30),
PopularityBoost AS (1 + IF(HasGrammy, @grammyweight, 0)),
(TitleScore + StudioScore) * FreshnessBoost * PopularityBoost)
LIMIT 25
Mejora el orden de las coincidencias de consultas
Puedes aplicar un multiplicador multiplicativo a la puntuación de novedad para los valores que contienen los términos de la consulta en el mismo orden en que aparecen en la consulta. Hay hay dos versiones de esta mejora: concordancia parcial y concordancia exacta. Una coincidencia parcial el potenciador se aplica en los siguientes casos:
- La
TOKENLIST
contiene todos los términos originales de la consulta. - Los tokens son adyacentes entre sí y en el mismo orden en que aparecen. en la consulta.
Existen ciertas reglas especiales para las conjunciones, las negaciones y las frases:
- Una consulta con una negación no puede recibir un aumento de coincidencia parcial.
- Una consulta con una conjunción recibe un boost si es parte de la conjunción aparezca en las ubicaciones adecuadas.
- Una consulta con una frase recibe un boost si la frase aparece en el
TOKENLIST
, y el término a la izquierda de la frase en la consulta parece ser la izquierda de la frase enTOKENLIST
, y lo mismo se aplica al término a la derecha de la frase.
Spanner aplica un aumento de coincidencia exacta cuando todos los son verdaderas. El primer y el último token de la consulta son el primero y el último tokens en el documento.
Documento de ejemplo: Puente sobre las aguas problemáticas
Consulta | Impulso aplicado |
---|---|
Puente problemático | sin boosting |
Puente sobre (otra agua) | sin boosting |
Puente (sobre O con problemas) | sin boosting |
Puente | incentivo parcial |
Puente (con problemas O agua) | potenciación parcial |
Puente sobre aguas con problemas | Amplificación exacta |
Puente "con problemas" Agua | impulso exacto |
Agua de puente (“exceso problema” O término faltante) | impulso exacto |
Limita la profundidad de la recuperación
Los índices de búsqueda suelen contener millones de documentos. Para las consultas en las que la predicados tienen baja selectividad, por lo que no es práctico clasificar todos los resultados. Las consultas de puntuación suelen tener dos límites:
- Límite de profundidad de recuperación: Es la cantidad máxima de filas que se deben puntuar.
- Límite de tamaño del conjunto de resultados: la cantidad máxima de filas que la consulta debe de retorno (por lo general, el tamaño de la página).
Las consultas pueden limitar la profundidad de recuperación con subconsultas SQL:
SELECT *
FROM (
SELECT AlbumId
FROM Albums
WHERE SEARCH(Title_Tokens, @p1)
ORDER BY ReleaseTimestamp DESC
LIMIT @retrieval_limit
)
ORDER BY SCORE(Title_Tokens, @p1)
LIMIT @page_size
Esto funciona muy bien si Spanner usa la configuración de clasificación para ordenar el índice.
¿Qué sigue?
- Obtén más información sobre las búsquedas en el texto completo.
- Obtén información para realizar una búsqueda de substring.
- Obtén información sobre cómo paginar los resultados de la búsqueda.
- Obtén más información sobre cómo combinar consultas de texto completo y no de texto.
- Obtén más información sobre cómo buscar en varias columnas.