ivf

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type IVFIndex

type IVFIndex struct {
	NList     int            // Number of inverted lists
	NProbe    int            // Number of lists to search
	KMeans    *KMeans        // K-means clusterer for routing
	Lists     [][]int        // Inverted lists (vector indices)
	Vectors   []simd.Vec512  // All vectors
	Scales    []float32      // Vector scales
	IDs       []int          // External IDs
	ListLocks []sync.RWMutex // Per-list locks for concurrent access
	Trained   bool
}

IVFIndex is an inverted file index for approximate search

func NewIVFIndex

func NewIVFIndex(nlist, nprobe int) *IVFIndex

NewIVFIndex creates a new IVF index

func (*IVFIndex) Add

func (idx *IVFIndex) Add(vec simd.Vec512, scale float32, id int)

Add adds a vector to the index

func (*IVFIndex) AddBatch

func (idx *IVFIndex) AddBatch(vectors []simd.Vec512, scales []float32, ids []int)

AddBatch adds multiple vectors efficiently

func (*IVFIndex) GetListSizes

func (idx *IVFIndex) GetListSizes() []int

GetListSizes returns the size of each inverted list

func (*IVFIndex) Search

func (idx *IVFIndex) Search(query *simd.Vec512, k int) []flat.SearchResult

Search performs approximate search

func (*IVFIndex) SearchWithStats

func (idx *IVFIndex) SearchWithStats(query *simd.Vec512, k int) ([]flat.SearchResult, SearchStats)

SearchWithStats performs search and returns statistics

func (*IVFIndex) SetNProbe

func (idx *IVFIndex) SetNProbe(nprobe int)

SetNProbe updates the number of lists to search

func (*IVFIndex) Size

func (idx *IVFIndex) Size() int

Size returns the number of vectors in the index

func (*IVFIndex) Train

func (idx *IVFIndex) Train(vectors []simd.Vec512, scales []float32)

Train trains the index on a sample of vectors

type IVFIndexOptimized

type IVFIndexOptimized struct {
	NList     int              // Number of inverted lists
	NProbe    int              // Number of lists to search
	KMeans    *KMeansOptimized // Optimized K-means clusterer for routing
	Lists     [][]int          // Inverted lists (vector indices)
	Vectors   []simd.Vec512    // All vectors
	Scales    []float32        // Vector scales
	IDs       []int            // External IDs
	ListLocks []sync.RWMutex   // Per-list locks for concurrent access
	Trained   bool
	// contains filtered or unexported fields
}

IVFIndexOptimized is an optimized inverted file index for approximate search

func NewIVFIndexOptimized

func NewIVFIndexOptimized(nlist, nprobe int) *IVFIndexOptimized

NewIVFIndexOptimized creates a new optimized IVF index

func (*IVFIndexOptimized) Add

func (idx *IVFIndexOptimized) Add(vec simd.Vec512, scale float32, id int)

Add adds a vector to the index (optimized with SIMD distance computation)

func (*IVFIndexOptimized) AddBatchOptimized

func (idx *IVFIndexOptimized) AddBatchOptimized(vectors []simd.Vec512, scales []float32, ids []int)

AddBatchOptimized adds multiple vectors with enhanced batching optimizations

func (*IVFIndexOptimized) GetIndexStats

func (idx *IVFIndexOptimized) GetIndexStats() IndexStats

GetIndexStats returns comprehensive index statistics

func (*IVFIndexOptimized) GetListSizes

func (idx *IVFIndexOptimized) GetListSizes() []int

GetListSizes returns the size of each inverted list

func (*IVFIndexOptimized) GetMemoryUsage

func (idx *IVFIndexOptimized) GetMemoryUsage() int64

GetMemoryUsage estimates memory usage in bytes

func (*IVFIndexOptimized) SearchOptimized

func (idx *IVFIndexOptimized) SearchOptimized(query *simd.Vec512, k int) []flat.SearchResult

SearchOptimized performs optimized approximate search

func (*IVFIndexOptimized) SearchOptimizedWithStats

func (idx *IVFIndexOptimized) SearchOptimizedWithStats(query *simd.Vec512, k int) ([]flat.SearchResult, SearchStats)

SearchOptimizedWithStats performs optimized search and returns statistics

func (*IVFIndexOptimized) SetNProbe

func (idx *IVFIndexOptimized) SetNProbe(nprobe int)

SetNProbe updates the number of lists to search

func (*IVFIndexOptimized) Size

func (idx *IVFIndexOptimized) Size() int

Size returns the number of vectors in the index

func (*IVFIndexOptimized) Train

func (idx *IVFIndexOptimized) Train(vectors []simd.Vec512, scales []float32)

Train trains the index on a sample of vectors using optimized k-means

type IndexStats

type IndexStats struct {
	TotalVectors    int
	NumLists        int
	MinListSize     int
	MaxListSize     int
	AvgListSize     float64
	ListImbalance   float64 // Higher = more imbalanced
	MemoryUsage     int64   // Bytes
	TrainingVectors int
}

IndexStats contains comprehensive index statistics

type KMeans

type KMeans struct {
	K         int           // Number of clusters
	MaxIters  int           // Maximum iterations
	Centroids []simd.Vec512 // Cluster centroids (quantized)
	Scales    []float32     // Centroid scales for dequantization
	Counts    []int         // Number of points per cluster
}

KMeans performs k-means clustering on int8 vectors

func NewKMeans

func NewKMeans(k int, maxIters int) *KMeans

NewKMeans creates a new k-means clusterer

func (*KMeans) Fit

func (km *KMeans) Fit(vectors []simd.Vec512, scales []float32)

Fit trains k-means on the given vectors

func (*KMeans) Predict

func (km *KMeans) Predict(vec *simd.Vec512) int

Predict returns the cluster assignment for a query vector

func (*KMeans) PredictMultiple

func (km *KMeans) PredictMultiple(vec *simd.Vec512, nprobe int) []int

PredictMultiple returns the nprobe nearest clusters for a query

type KMeansOptimized

type KMeansOptimized struct {
	K         int           // Number of clusters
	MaxIters  int           // Maximum iterations
	Centroids []simd.Vec512 // Cluster centroids (quantized)
	Scales    []float32     // Centroid scales for dequantization
	Counts    []int         // Number of points per cluster
	// contains filtered or unexported fields
}

KMeansOptimized is an optimized k-means implementation with better memory management and SIMD-accelerated distance computations

func NewKMeansOptimized

func NewKMeansOptimized(k int, maxIters int) *KMeansOptimized

NewKMeansOptimized creates a new optimized k-means clusterer

func (*KMeansOptimized) Fit

func (km *KMeansOptimized) Fit(vectors []simd.Vec512, scales []float32)

Fit trains k-means on the given vectors with optimizations

func (*KMeansOptimized) Predict

func (km *KMeansOptimized) Predict(vec *simd.Vec512) int

Predict returns the cluster assignment for a query vector (SIMD optimized)

func (*KMeansOptimized) PredictMultiple

func (km *KMeansOptimized) PredictMultiple(vec *simd.Vec512, nprobe int) []int

PredictMultiple returns the nprobe nearest clusters for a query (optimized)

type SearchStats

type SearchStats struct {
	ClustersSearched int
	CandidatesScored int
	ResultsReturned  int
}

SearchStats contains search statistics

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL