Prácticas recomendadas para la indexación vectorial

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 un tree_depth de 2. De lo contrario, un tree_depth de 3 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 definas num_leaves con un valor superior a table_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. Aumentar num_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ón CREATE VECTOR INDEX como valor de num_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:

  1. Asigne a num_leaves un valor que sea un múltiplo k de su valor original (por ejemplo, 2 * sqrt(table_row_count)).
  2. Defina num_leaves_to_search como el mismo múltiplo k de su valor original.
  3. 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.

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:

  1. 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.
  2. 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 sintonizar num_leaves_to_search en tu nueva consulta.
  3. Elimina el índice vectorial obsoleto.

Siguientes pasos