Referencia del índice de ScaNN

Selecciona una versión de la documentación:

En esta página se proporciona material de referencia sobre el índice ScaNN.

Parámetros de ajuste

Los siguientes parámetros de índice y marcas de base de datos se usan conjuntamente para encontrar el equilibrio adecuado entre la recuperación y las consultas por segundo.

Parámetro de ajuste Descripción Tipo de opción
max_num_levels Número máximo de niveles de centroides del árbol de agrupamiento K-medias.
  • Índice de árbol de dos niveles: el valor predeterminado es 1 para un árbol de dos niveles (1 nivel de centroide + nivel de hoja inferior).
  • Índice de árbol de tres niveles: se asigna el valor 2 de forma predeterminada para un árbol de tres niveles (2 niveles de centroides + nivel de hoja inferior).
  • Asigna el valor 2 si el número de filas de vectores supera los 100 millones.
  • Asigna el valor 1 si el número de filas de vectores es inferior a 10 millones.
  • Asigna el valor 1 o 2 si el número de filas de vectores está entre 10 y 100 millones para optimizar el tiempo de compilación del índice (asigna el valor 2) o la recuperación de la búsqueda (asigna el valor 1).
Creación de índices
(opcional)
num_leaves Número de particiones que se aplicarán a este índice. El número de particiones que apliques al crear un índice afecta al rendimiento del índice. Al aumentar las particiones de un número determinado de vectores, se crea un índice más detallado, lo que mejora la recuperación y el rendimiento de las consultas. Sin embargo, esto conlleva un aumento del tiempo de creación del índice.

Como los árboles de tres niveles se compilan más rápido que los de dos, puedes aumentar el num_leaves_value al crear un índice de árbol de tres niveles para conseguir un mejor rendimiento.
  • Índice de dos niveles: asigna a este valor cualquier valor entre 1 y 1048576.

    Para un índice que equilibre la creación rápida de índices y el buen rendimiento de búsqueda, usa sqrt(ROWS) como punto de partida, donde ROWS es el número de filas de vectores. El número de vectores que contiene cada partición se calcula mediante
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Como se puede crear un índice de árbol de dos niveles en un conjunto de datos con menos de 10 millones de filas de vectores, cada partición contendrá menos de (sqrt(10M)) vectores, es decir, 3200 vectores. Para obtener una calidad óptima en la búsqueda vectorial, se recomienda minimizar el número de vectores de cada partición. El tamaño de partición recomendado es de unos 100 vectores por partición, por lo que debes asignar el valor ROWS/100 a num_leaves. Si tienes 10 millones de vectores,debes definir num_leaves como 100.000.
  • Índice de tres niveles: asigna a este valor cualquier valor entre 1 y 1048576.

    Si no sabes qué valor seleccionar, usa power(ROWS, 2/3) como punto de partida, donde ROWS es el número de filas de vectores. El número de vectores que contiene cada partición se calcula mediante
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Como se puede crear un índice de árbol de tres niveles en un conjunto de datos con más de 100 millones de filas de vectores, cada partición contendrá más de
    (power(100M, 1/3)) vectores, es decir, 465 vectores. Para obtener una calidad óptima en la búsqueda vectorial, se recomienda minimizar el número de vectores de cada partición. El tamaño de partición recomendado es de unos 100 vectores por partición, por lo que debes asignar el valor ROWS/100 a num_leaves. Si tienes 100 millones de vectores, debes asignar el valor num_leaves a 1 millón.
Creación de índice
(obligatorio)
quantizer El tipo de cuantificador que quieras usar para el árbol de K-means. El valor predeterminado es SQ8, que ofrece un mejor rendimiento de las consultas con una pérdida mínima de recuerdo (normalmente, menos del 1-2%).

Asigna el valor FLAT si necesitas un recuerdo del 99% o más.
Creación de índices
(opcional)
scann.enable_inline_filtering Habilita la compatibilidad con el filtrado insertado, que consulta tus datos y aplica filtros directamente en una operación de búsqueda de similitud de vectores. Estas consultas de similitud vectorial usan filtros en las mismas tablas de la base de datos y completan la evaluación de los filtros mientras calculan la distancia para identificar el elemento más cercano. Esta opción está inhabilitada de forma predeterminada.

Para habilitar el filtrado insertado, asigna el valor true a este parámetro. Si observas que el rendimiento empeora, selecciona false

.Esta opción está disponible en versión preliminar.
Tiempo de ejecución de la consulta
(opcional)
scann.enable_pca Habilita el análisis de componentes principales (PCA), una técnica de reducción de dimensiones que se usa para reducir automáticamente el tamaño de la inserción cuando es posible. Esta opción está habilitada de forma predeterminada.

Selecciona false si observas que la función de recordar se deteriora.
Creación de índices
(opcional)
scann.num_leaves_to_search Esta marca de base de datos controla el número absoluto de hojas o particiones que se deben buscar, lo que te permite elegir entre la recuperación y las consultas por segundo. El valor predeterminado es el 1% del valor definido en num_leaves.

Un valor más alto dará como resultado una mejor recuperación, pero un QPS más bajo. Del mismo modo, un valor más bajo dará lugar a una recuperación más baja, pero a un QPS más alto.
Tiempo de ejecución de la consulta
(opcional)
scann.pre_reordering_num_neighbors Cuando se define la marca de la base de datos, se especifica el número de vecinos candidatos que se deben tener en cuenta durante las fases de reordenación después de que la búsqueda inicial identifique un conjunto de candidatos. Asigna a este parámetro un valor superior al número de vecinos que quieres que devuelva la consulta.

Un valor más alto da como resultado una mejor recuperación, pero un QPS más bajo. Asigne el valor 0 para inhabilitar la reordenación. El valor predeterminado es 0 si la PCA no está habilitada durante la creación del índice. De lo contrario, el valor predeterminado es 50 x K, donde K es el valor de LIMIT especificado en la consulta.
Tiempo de ejecución de la consulta
(opcional)
scann.num_search_threads Número de subprocesos de búsqueda para la búsqueda multihilo. Esto puede ayudar a reducir la latencia de una sola consulta usando más de un hilo para la búsqueda de ANN de ScaNN en aplicaciones sensibles a la latencia. Este ajuste no mejora la latencia de una sola consulta si la base de datos ya está limitada por la CPU. El valor predeterminado es 2. Tiempo de ejecución de la consulta
(opcional)

Siguientes pasos