Observa cómo avanza una búsqueda a través del gráfico en capas, desde la capa superior dispersa (autopistas) hasta la capa inferior densa (carreteras locales). Arrastra el punto de consulta en la Capa 0 y ajusta M / ef para ver cómo cambia el gráfico.
M. Las capas superiores son dispersas (pocos nodos, aristas largas = «autopistas»). La capa 0 es densa (todos los nodos, aristas cortas = «carreteras locales»).ef »: en la capa inferior, en lugar de detenerse en el primer mínimo local, « HNSW » mantiene un conjunto de ef mejores candidatos y amplía sus vecindades. Es ef → mayor precisión, pero más lento.Por qué es rápido: las capas superiores actúan como un índice sobre el índice; se recorren enormes distancias en solo unos pocos saltos y, a continuación, se amplía la imagen. Para N puntos, la búsqueda recorre aproximadamente O(log N) nodos en lugar de N.
HNSW (Hierarchical Navigable Small World) es un algoritmo aproximado de vecino más cercano basado en grafos. Organiza los vectores en una pila de grafos de «mundo pequeño» navegables: capas superiores dispersas con aristas de largo alcance para el enrutamiento aproximado, y una capa inferior densa con aristas cortas para el recorrido final de alta precisión. La búsqueda avanza de forma codiciosa hacia la consulta en cada capa y, a continuación, desciende, visitando aproximadamente O(log N) nodos en lugar de escanear todos los N.
HNSW es el índice vectorial en memoria más utilizado y el índice de grafos predeterminado en Milvus. Milvus también ofrece HNSW_SQ y HNSW_PQ variantes que cuantifican los vectores almacenados para reducir el consumo de memoria a costa de una ligera pérdida de recuperación.
M (tiempo de construcción): el número máximo de aristas por nodo, el mismo control que el deslizador anterior. Los valores típicos oscilan entre 8 y 64. Un valor M más alto mejora la recuperación y la conectividad del grafo, pero aumenta el consumo de memoria de forma lineal y ralentiza la construcción.efConstruction (tiempo de construcción): el tamaño del conjunto de candidatos utilizado al insertar nodos. Los valores más altos generan un grafo de mejor calidad (mayor recuperación alcanzable) a costa de una construcción más lenta del índice. Los valores típicos oscilan entre 100 y 500.ef / ef_search (tiempo de consulta): el conjunto de candidatos que se mantiene durante el recorrido de la Capa 0 —el principal control de recuperación/latencia en el momento de la búsqueda—. Debe ser, como mínimo, tu top-K. Auméntalo hasta que la recuperación se estabilice; la latencia crece de forma aproximadamente lineal con él.HNSW Normalmente ofrece la mejor latencia de consulta con una alta recuperación para la búsqueda en memoria; por eso es la opción predeterminada cuando el conjunto de datos (más la sobrecarga del grafo) cabe en RAM. Sus costes son la memoria y el tiempo de construcción: el grafo añade una sobrecarga apreciable por vector, y las inserciones son más lentas que la asignación k-means de IVF. Elige IVF cuando necesites creaciones de índices rápidas o una cuantificación agresiva, y DiskANN cuando el conjunto de datos sea demasiado grande para RAM pero sigas necesitando una alta recuperación.
M limita el número de aristas que cada nodo conserva por capa. Un valor mayor de M mejora la conectividad del grafo —mayor recuperación y enrutamiento más robusto—, pero la memoria crece linealmente con M y la creación de índices se ralentiza. Los valores entre 8 y 64 cubren la mayoría de las cargas de trabajo; entre 16 y 32 suele ser el punto óptimo.
Ambos son tamaños del conjunto de candidatos, que se aplican en momentos diferentes. La « efConstruction » se utiliza durante la construcción del índice: determina con qué exhaustividad cada nodo insertado busca vecinos, por lo que controla la calidad del grafo. La « ef » (ef_search) se utiliza en el momento de la consulta: controla la amplitud de la búsqueda en la Capa 0, sacrificando latencia a cambio de recuperación en cada consulta.
Aproximadamente los vectores sin procesar más el grafo: unos d × 4 bytes por vector para datos float32, más del orden de M × 2 × 8 bytes de aristas por nodo. Para implementaciones con limitaciones de memoria, Milvus ofrece HNSW_SQ y HNSW_PQ, que cuantifican los vectores almacenados, o DiskANN, que traslada los vectores completos a SSD.
Utiliza « HNSW » cuando la prioridad sea la latencia de la consulta con una alta recuperación y el índice quepa en la memoria; suele ser la mejor opción en ese caso. Prefiere « IVF » cuando reconstruyas índices con frecuencia (la creación es mucho más rápida) o cuando se combine con la cuantización « SQ8 » / «PQ » para ajustarse a un presupuesto de memoria limitado.
Más información: lee la documentación de «HNSW » para conocer los parámetros exactos del índice, o consulta «Index Explained» para obtener la guía de decisión completa.
Comparación en paralelo entre la búsqueda por fuerza bruta y la búsqueda agrupada. Ajusta « nprobe » en tiempo real.
Descubre cómo PQ-in-RAM + full-vectors-on-SSD te permite buscar en conjuntos de datos de miles de millones de registros desde un portátil.
Arrastra un punto de consulta y alterna entre « L2 », «Cosine» y « IP » para ver cómo cambia el «más cercano».