Clasifica los resultados de la búsqueda

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:

  1. La TOKENLIST contiene todos los términos originales de la consulta.
  2. 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 en TOKENLIST, 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:

  1. Límite de profundidad de recuperación: Es la cantidad máxima de filas que se deben puntuar.
  2. 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?