En esta página se describen las prácticas recomendadas de indexación vectorial para optimizar los índices vectoriales y mejorar los resultados de las consultas de los vecinos más cercanos aproximados (ANN).
Ajustar las opciones de búsqueda vectorial
Los valores más óptimos para las opciones de tu índice vectorial dependen de tu caso práctico, tu conjunto de datos vectoriales y los vectores de consulta. Puedes definir y ajustar estos valores
creando un nuevo índice vectorial y definiendo index_option_list
en la instrucción CREATE VECTOR INDEX
. Es posible que tengas que realizar ajustes iterativos para encontrar los mejores valores para tu carga de trabajo específica.
A continuación, te indicamos algunas directrices útiles que debes seguir al elegir los valores adecuados:
tree_depth
(nivel de árbol): si la tabla que vas a indexar tiene menos de 10 millones de filas, usa untree_depth
de2
. De lo contrario, untree_depth
de3
admite tablas de hasta unos 10.000 millones de filas.num_leaves
: usa la raíz cuadrada del número de filas del conjunto de datos. Un valor más alto puede aumentar el tiempo de compilación del índice vectorial. No definasnum_leaves
con un valor superior atable_row_count
dividido entre 1000, ya que esto dará lugar a hojas demasiado pequeñas y a un rendimiento deficiente.num_leaves_to_search
: esta opción especifica cuántos nodos hoja del índice se buscan. Aumentarnum_leaves_to_search
mejora la recuperación, pero también incrementa la latencia y el coste. Te recomendamos que uses un número que sea el 1% del número total de hojas definidas en la instrucciónCREATE VECTOR INDEX
como valor denum_leaves_to_search
. Si usas una cláusula de filtro, aumenta este valor para ampliar la búsqueda.
Si se consigue una precisión aceptable, pero el coste de las consultas es demasiado alto, lo que da lugar a un valor máximo de CPS bajo, prueba a aumentar num_leaves
siguiendo estos pasos:
- Asigne a
num_leaves
un valor que sea un múltiplo k de su valor original (por ejemplo,2 * sqrt(table_row_count)
). - Defina
num_leaves_to_search
como el mismo múltiplo k de su valor original. - Experimenta con la reducción de
num_leaves_to_search
para mejorar el coste y las consultas por segundo, sin dejar de mantener la cobertura.
Mejorar la recuperación
Para mejorar la recuperación, considera la posibilidad de ajustar el valor num_leaves_to_search
o de volver a compilar el índice vectorial.
Aumentar el valor de num_leaves_to_search
Si el valor de num_leaves_to_search
es demasiado pequeño, puede que te resulte más difícil encontrar los vecinos más cercanos de algunos vectores de consulta. Crear un nuevo índice vectorial con un valor de num_leaves_to_search
aumentado puede ayudar a mejorar la recuperación buscando más hojas. Las consultas recientes pueden contener más vectores de este tipo.
Reconstruir el índice vectorial
La estructura de árbol del índice vectorial se optimiza para el conjunto de datos en el momento de la creación y, a partir de entonces, es estática. Por lo tanto, si se añaden vectores significativamente diferentes después de crear el índice de vector inicial, la estructura del árbol podría no ser óptima, lo que daría lugar a un peor recuerdo.
Para volver a compilar el índice vectorial sin tiempo de inactividad, sigue estos pasos:
- Crea un índice vectorial en la misma columna de inserciones que el índice vectorial actual y actualiza los parámetros (por ejemplo,
OPTIONS
) según corresponda. - Una vez que se haya creado el índice, usa la pista
FORCE_INDEX
para apuntar al nuevo índice y actualizar la consulta de búsqueda vectorial. De esta forma, se asegura de que la consulta use el nuevo índice vectorial. También es posible que tengas que volver a sintonizarnum_leaves_to_search
en tu nueva consulta. - Elimina el índice vectorial obsoleto.
Siguientes pasos
Consulta más información sobre los índices vectoriales de Spanner.
Consulta más información sobre los vecinos más cercanos aproximados de Spanner.
Consulta más información sobre las funciones GoogleSQL
APPROXIMATE_COSINE_DISTANCE()
,APPROXIMATE_EUCLIDEAN_DISTANCE()
yAPPROXIMATE_DOT_PRODUCT()
.Consulta más información sobre las instrucciones
VECTOR INDEX
de GoogleSQL.