Vector search finds similar vectors in high-dimensional spaces. It enables similarity search. It works with embeddings. It powers semantic search and recommendation systems. It requires efficient indexing for scale.
Vector search compares query vectors to database vectors. It uses distance metrics to measure similarity. It returns most similar vectors. It scales to millions of vectors with proper indexing.
The diagram shows vector search process. Query vector compares to database vectors. Distance metrics measure similarity. Indexes enable fast retrieval.
Similarity Metrics
Similarity metrics measure vector relationships. Cosine similarity measures angle between vectors. Euclidean distance measures straight-line distance. Manhattan distance measures city-block distance. Each suits different use cases.
Cosine similarity is cos(θ) = (A·B) / (||A|| × ||B||). It ranges from -1 to 1. Higher values mean more similar. It ignores vector magnitudes. It works well for embeddings.
# Similarity Metrics
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, euclidean_distances, manhattan_distances
1-(embedding <=>(SELECT embedding FROM document_embeddings WHERE id =1))AS similarity
FROM document_embeddings
WHERE id !=1
ORDERBY similarity DESC
LIMIT5;
Choose metrics based on data characteristics. Cosine works well for normalized embeddings. Euclidean works for spatial data. Manhattan works for sparse data.
The diagram compares similarity metrics. Cosine measures angles. Euclidean measures distances. Each has different properties.
Distance Functions
Distance functions measure vector differences. They enable similarity ranking. Common functions include L2 (Euclidean), L1 (Manhattan), and cosine distance. Each has different computational properties.
L2 distance is ||A - B||₂ = √Σ(Aᵢ - Bᵢ)². It measures straight-line distance. It emphasizes large differences. It works well for dense vectors.
The diagram shows distance functions. L2 measures Euclidean distance. L1 measures Manhattan distance. Cosine distance measures angles. Each function suits different data types.
Indexing Strategies
Indexing enables fast vector search at scale. Exact search is accurate but slow. Approximate search is fast but approximate. Common indexes include HNSW and IVFFlat.
HNSW builds hierarchical navigable small worlds. It creates multi-layer graphs. It enables fast approximate search. It works well for high-dimensional vectors.
data = np.random.randn(num_elements, dim).astype('float32')
index.add_items(data, np.arange(num_elements))
# Search
query = np.random.randn(1, dim).astype('float32')
index.set_ef(50)
labels, distances = index.knn_query(query, k=10)
print("Nearest neighbors: "+str(labels))
-- NeuronDB: Vector Indexing
CREATEINDEX embedding_hnsw_idx ON document_embeddings
USING hnsw (embedding vector_cosine_ops)
WITH(m =16, ef_construction =200);
-- Fast similarity search using index
SELECT id, content
FROM document_embeddings
ORDERBY embedding <=>(SELECT embedding FROM document_embeddings WHERE id =1)
LIMIT10;
Indexing enables scalable search. HNSW works well for high dimensions. IVFFlat works well for lower dimensions.
Detailed Indexing Algorithms
HNSW (Hierarchical Navigable Small World) builds multi-layer graphs. Bottom layer contains all vectors. Upper layers contain fewer vectors. Search starts at top layer. It navigates to bottom layer. It finds approximate nearest neighbors quickly.
Construction parameters include M (connections per node) and ef_construction (search width). Larger M increases recall but slows construction. Larger ef_construction improves quality but increases time. Typical M is 16-32. Typical ef_construction is 100-200.
IVFFlat (Inverted File with Flat Compression) clusters vectors. It creates Voronoi cells. Each cell has a centroid. Search finds closest centroids. It searches vectors in those cells. It works well for lower dimensions.
Tune index parameters for your use case. Higher recall requires more computation. Lower recall enables faster search. Balance accuracy and speed.
For HNSW, increase M for better recall. Increase ef_search for more accurate results. Higher values slow search. Typical ef_search is 50-200. For production, start with ef_search=50. Increase if recall is insufficient.
For IVFFlat, increase nlist for better quality. Increase nprobe for higher recall. nprobe controls clusters searched. Higher nprobe improves recall but slows search. Typical nprobe is 1-10.
Monitor index performance. Measure query latency. Measure recall at k. Measure index size. Adjust parameters based on requirements.
The diagram shows indexing structures. HNSW uses hierarchical graphs. IVFFlat uses inverted files. Each enables fast search.
Approximate Nearest Neighbor Search
Approximate search trades accuracy for speed. It finds near-optimal results quickly. It scales to billions of vectors. It works well for many applications.
Approximate methods include locality-sensitive hashing, product quantization, and graph-based methods. Each has different accuracy-speed tradeoffs.
# Approximate Nearest Neighbor
from sklearn.neighbors import LSHForest
# Create LSH index
lsh = LSHForest(n_estimators=10, n_candidates=50)
lsh.fit(vectors)
# Approximate search
distances, indices = lsh.kneighbors(query_vector, n_neighbors=10)
print("Approximate neighbors: "+str(indices))
Approximate search enables scale. It finds good results quickly. It works for large datasets.
Exact vs Approximate Search
Exact search finds true nearest neighbors. It is accurate but slow. Approximate search finds near neighbors. It is fast but approximate.
Choose based on requirements. Use exact for small datasets or high accuracy needs. Use approximate for large datasets or speed needs.
The diagram compares search methods. Exact search is accurate but slow. Approximate search is fast but approximate.
Performance Optimization
Optimization improves search speed and accuracy. Techniques include quantization, pruning, and parallel processing. Each reduces computation or improves efficiency.
Optimization improves efficiency. It reduces memory usage. It speeds up search.
Summary
Vector search finds similar vectors efficiently. Similarity metrics measure relationships. Cosine similarity works well for embeddings. Distance functions enable ranking. Indexing enables scalable search. HNSW works for high dimensions. Approximate search trades accuracy for speed. Exact search is accurate but slow. Optimization improves performance. Vector search powers semantic search and recommendations.