Vector Search
Vector search enables semantic similarity matching by converting unstructured data (text, images, audio) into high-dimensional vectors and finding similar items through mathematical distance calculations. Tacnode provides enterprise-grade vector search capabilities with PostgreSQL compatibility.
Quick Reference
Feature | Index Type | Best For | Memory | Build Speed | Query Speed |
---|---|---|---|---|---|
IVFFlat | Cluster-based | Large datasets (100K+) | Low | Fast | Moderate |
HNSW | Graph-based | High accuracy needs | High | Slow | Fast |
Quantization | int8/fp16 | Memory optimization | 50-75% less | - | Slight overhead |
Query Methods:
- Standard indexes: Use operators (
<->
,<#>
,<=>
) - Quantized indexes: Use functions (
l2_distance()
,inner_product()
,cosine_distance()
)
Understanding Vector Search
Artificial intelligence algorithms can convert various forms of unstructured data—such as speech, images, videos, language, text, and behaviors—into multi-dimensional vectors. These vectors act like coordinates in a mathematical space, representing different entities and their relationships.
The process of transforming unstructured data into vectors is called Embedding, while retrieving these vectors to find the associated entities is known as unstructured retrieval.
From Data to Vectors
Vector embeddings transform unstructured data into numerical representations that capture semantic meaning:
Distance Metrics
Tacnode supports three distance calculations:
Operator | Distance Type | Use Case | Formula |
---|---|---|---|
<-> | Euclidean (L2) | General similarity | √Σ(ai - bi)² |
<#> | Inner Product | Recommendation systems | -Σ(ai × bi) |
<=> | Cosine | Text/semantic search | 1 - (A·B)/(‖A‖‖B‖) |
Setting Up Vector Tables
Basic Table Structure
Multi-Modal Example
Index Types and Configuration
IVFFlat Index (Cluster-Based)
Best for large datasets with balanced performance and memory usage:
HNSW Index (Graph-Based)
Best for high-accuracy requirements and fast queries:
Quantization Options
Reduce memory usage with minimal accuracy loss:
Performing Vector Searches
Basic Similarity Search
Search with Filtering
Multi-Vector Search
Query Optimization
IVFFlat Configuration
HNSW Configuration
Quantized Index Query Methods
When using quantized indexes (int8 or fp16), queries must use specialized functions instead of distance operators. This is because quantized vectors require specific distance calculation methods:
Quantized Index Distance Functions:
l2_distance(vector, vector)
- Calculate Euclidean distance (L2 Distance)inner_product(vector, vector)
- Calculate inner product distance (Inner Product)cosine_distance(vector, vector)
- Calculate cosine distance (Cosine Distance)
Important: When using quantized indexes, you must use the corresponding functions for queries. The standard operators (<->
, <#>
, <=>
) will not work with quantized indexes.
Quantized vs Non-Quantized Query Comparison:
Performance Monitoring
Advanced Use Cases
Semantic Search Application
Recommendation System
Hybrid Search (Vector + Text)
Memory-Optimized Quantized Search
For memory-constrained environments, quantized indexes provide significant space savings:
Best Practices
Index Selection Guidelines
IVFFlat Index - Cluster-Based:
- Best for: Large datasets (> 100K vectors), memory-constrained environments
- Lists parameter:
- < 1M rows:
lists = rows/1000
- > 1M rows:
lists = sqrt(rows)
- < 1M rows:
- Probes tuning: Start with
lists/20
, adjust based on performance needs - Trade-offs: Lower memory usage, faster build time, moderate query performance
HNSW Index - Graph-Based:
- Best for: High accuracy requirements, fast query performance (< 10M vectors)
- Parameters:
m
: 16 (balanced), 32 (high accuracy), 8 (fast build)ef_construction
: 64 (default), 128+ (better quality)
- Trade-offs: Higher memory usage, slower build time, excellent query performance
Memory Optimization Strategies:
- Vector Quantization: Use
fp16
(50% reduction) orint8
(75% reduction) - Dimension Reduction: Reduce vector dimensions if possible during embedding
- Index Type Selection: Use IVFFlat for very large datasets (> 10M vectors)
- Data Archiving: Implement vector archiving for historical data
- Batch Operations: Process embeddings in batches to reduce memory peaks
Quantization Selection Guide:
Quantization Type | Memory Reduction | Precision Loss | Query Method | Best For |
---|---|---|---|---|
None (float32) | 0% | None | Operators (<-> , <#> , <=> ) | High precision needs |
fp16 | 50% | Minimal | Functions (l2_distance() , etc.) | Balanced memory/precision |
int8 | 75% | Moderate | Functions (l2_distance() , etc.) | Memory-constrained environments |
Production Deployment Tips
- Index Building: Build indexes during low-traffic periods
- Monitoring: Track query performance and recall metrics
- Scaling: Use read replicas for query load distribution
- Backup: Include vector indexes in backup strategy
- Updates: Consider rebuild vs. incremental updates for large changes
Common Pitfalls to Avoid
- Wrong distance metric: Match metric to your embedding model
- Inappropriate index params: Test different configurations
- Missing normalization: Ensure vectors are properly normalized
- Ignoring data distribution: Consider vector clustering patterns
- Over-indexing: Don't create unnecessary indexes
- Quantized index query errors: Use functions (
l2_distance()
,inner_product()
,cosine_distance()
) instead of operators (<->
,<#>
,<=>
) for quantized indexes
Critical Error Example:
This comprehensive guide covers all aspects of vector search in Tacnode, from basic setup to advanced hybrid search implementations.