En esta página, se describen las prácticas recomendadas para la indexación de vectores que optimizan tus índices de vectores y mejoran los resultados de las consultas de vecino más cercano aproximado (ANN).
Ajusta las opciones de búsqueda de vectores
Los valores más óptimos para las opciones de tu índice vectorial dependen de tu caso de uso, tu conjunto de datos de vectores y los vectores de consulta. Puedes establecer y ajustar estos valores creando un nuevo índice de vectores y configurando index_option_list en la instrucción CREATE VECTOR INDEX. Es posible que debas realizar ajustes iterativos para encontrar los mejores valores para tu carga de trabajo específica.
A continuación, se incluyen algunos lineamientos útiles que puedes seguir cuando elijas valores adecuados:
tree_depth(nivel del árbol): Si la tabla que indexas tiene menos de 10 millones de filas, usa untree_depthde2. De lo contrario, untree_depthde3admite tablas de hasta 10,000 millones de filas aproximadamente.num_leaves: Usa la raíz cuadrada de la cantidad de filas del conjunto de datos. Un valor más grande puede aumentar el tiempo de compilación del índice de vectores. Evita establecernum_leavesen un valor mayor que el detable_row_countdividido por 1,000, ya que esto genera hojas demasiado pequeñas y un rendimiento deficiente.num_leaves_to_search: Esta opción especifica cuántos nodos hoja del índice se buscan. Aumentarnum_leaves_to_searchmejora la recuperación, pero también incrementa la latencia y el costo. Recomendamos usar un número que sea el 1% de la cantidad total de nodos hoja definidos en la instrucciónCREATE VECTOR INDEXcomo valor paranum_leaves_to_search. Si usas una cláusula de filtro, aumenta este valor para ampliar la búsqueda.
Si se logra una recuperación aceptable, pero el costo de la consulta es demasiado alto, lo que genera un QPS máximo bajo, intenta aumentar num_leaves siguiendo estos pasos:
- Establece
num_leavesen algún múltiplo k de su valor original (por ejemplo,2 * sqrt(table_row_count)). - Establece
num_leaves_to_searchpara que sea el mismo múltiplo k de su valor original. - Experimenta con la reducción de
num_leaves_to_searchpara mejorar el costo y las QPS, y mantener la recuperación.
Mejora la recuperación
Para mejorar la recuperación, considera ajustar el valor de num_leaves_to_search o volver a compilar tu índice de vectores.
Aumentar el valor de num_leaves_to_search
Si el valor de num_leaves_to_search es demasiado pequeño, es posible que te resulte más difícil encontrar los vecinos más cercanos para algunos vectores de búsqueda. Crear un nuevo índice de vectores con un valor de num_leaves_to_search aumentado puede ayudar a mejorar la recuperación, ya que se buscan más hojas. Las búsquedas recientes pueden contener más de estos vectores desafiantes.
Vuelve a compilar el índice de vectores
La estructura de árbol del índice de vectores se optimiza para el conjunto de datos en el momento de la creación y, luego, permanece estática. Por lo tanto, si se agregan vectores significativamente diferentes después de crear el índice de vectores inicial, la estructura del árbol podría ser subóptima, lo que generaría una recuperación más deficiente.
Para volver a compilar tu índice de vectores sin tiempo de inactividad, haz lo siguiente:
- Crea un índice vectorial nuevo en la misma columna de incorporación que el índice vectorial actual y actualiza los parámetros (por ejemplo,
OPTIONS) según corresponda. Una vez que se complete la creación del índice, puedes evaluar cuál de los dos índices tiene un mejor rendimiento. Si es así, continúa con el siguiente paso. De lo contrario, continúa con la eliminación del índice de vectores desactualizado. Spanner decide automáticamente qué índice usar en la ejecución de la consulta. Spanner proporciona dos formas de especificar el índice que se usará. Elige uno de los siguientes métodos para evaluar y comparar tus índices:
a. Cambia tu aplicación: Puedes actualizar un subconjunto de tus búsquedas para que usen la sugerencia
FORCE_INDEXy apunten al nuevo índice para actualizar la búsqueda de vectores. Esto garantiza que la búsqueda use el nuevo índice de vectores. Con este método, es posible que debas reajustarnum_leaves_to_searchen tu nueva búsqueda.b. Cambia tu esquema: Puedes establecer la opción
disable_searchen uno de tus índices vectoriales. Cuando se establece entrue, Spanner inhabilita el índice de vectores. Para ello, ejecuta la instrucción de cambio de esquemaALTER VECTOR INDEX:ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);Este método evita que Spanner use este índice de vectores en tu base de datos. Si tienes dos índices y configuras esta opción en el índice más antiguo, todas las búsquedas usarán el índice nuevo después de que se aplique el cambio de esquema. Si usas la sugerencia
FORCE_INDEXpara especificar un índice de vectores que tiene la opcióndisable_searchestablecida entrue, la consulta falla.Descarta el índice vectorial desactualizado.
¿Qué sigue?
Obtén más información sobre los índices de vectores de Spanner.
Obtén más información sobre los vecinos más cercanos aproximados de Spanner.
Obtén más información sobre las funciones
APPROXIMATE_COSINE_DISTANCE(),APPROXIMATE_EUCLIDEAN_DISTANCE()yAPPROXIMATE_DOT_PRODUCT()de GoogleSQL.Obtén más información sobre las sentencias
VECTOR INDEXde GoogleSQL.