Versions in this module Expand all Collapse all v0 v0.1.1 Oct 14, 2025 Changes in this version + const B + const K1 + const UnassignedCluster + var DefaultMaxIter = 20 + var ErrUnknownDistanceKind = errors.New("unknown distance kind") + var ErrZeroVector = errors.New("zero vector not allowed for this metric") + func Autocut(yValues []float32, cutOff int) int + func AutocutResults[T Result](results []T, cutoff int) []T + func CalculatePQParams(dim int) (M int, Nbits int) + func DefaultHNSWConfig() (m, efConstruction, efSearch int) + func FindNearestCentroidIndex(v []float32, centroids [][]float32, distance Distance) int + func KMeans(vectors [][]float32, k int, distance Distance, maxIter int) (centroids [][]float32, vectorToClusterMapping []int) + func KMeansSubspace(vectors [][]float32, k int, maxIter int) (centroids [][]float32, vectorToClusterMapping []int) + func LimitResults[T Result](results []T, k int) []T + func Norm(v []float32) float32 + func Normalize(v []float32) []float32 + func NormalizeInPlace(v []float32) + func ReturnDocumentFilter(filter *DocumentFilter) + func Scale(v []float32, scalar float32) []float32 + type BM25SearchIndex struct + func NewBM25SearchIndex() *BM25SearchIndex + func (ix *BM25SearchIndex) Add(id uint32, text string) error + func (ix *BM25SearchIndex) Flush() error + func (ix *BM25SearchIndex) NewSearch() TextSearch + func (ix *BM25SearchIndex) ReadFrom(r io.Reader) (int64, error) + func (ix *BM25SearchIndex) Remove(id uint32) error + func (ix *BM25SearchIndex) WriteTo(w io.Writer) (int64, error) + type CompressedVector struct + Code []uint8 + Node VectorNode + type Distance interface + Calculate func(a, b []float32) float32 + CalculateBatch func(queries [][]float32, target []float32) []float32 + Preprocess func(target []float32) ([]float32, error) + PreprocessInPlace func(target []float32) error + func NewDistance(t DistanceKind) (Distance, error) + type DistanceKind string + const Cosine + const Euclidean + const L2Squared + type DocumentFilter struct + func NewDocumentFilter(documentIDs []uint32) *DocumentFilter + func (f *DocumentFilter) Count() uint64 + func (f *DocumentFilter) IsEligible(docID uint32) bool + func (f *DocumentFilter) IsEmpty() bool + func (f *DocumentFilter) ShouldSkip(docID uint32) bool + type Filter struct + Field string + Operator Operator + Value interface{} + Value2 interface{} + func AnyOf(field string, values ...interface{}) Filter + func Between(field string, min, max interface{}) Filter + func Eq(field string, value interface{}) Filter + func Exists(field string) Filter + func Gt(field string, value interface{}) Filter + func Gte(field string, value interface{}) Filter + func In(field string, values ...interface{}) Filter + func IsNotNull(field string) Filter + func IsNull(field string) Filter + func Lt(field string, value interface{}) Filter + func Lte(field string, value interface{}) Filter + func Ne(field string, value interface{}) Filter + func NoneOf(field string, values ...interface{}) Filter + func Not(filter Filter) Filter + func NotExists(field string) Filter + func NotIn(field string, values ...interface{}) Filter + func Range(field string, min, max interface{}) Filter + type FilterGroup struct + Filters []Filter + Logic LogicOperator + type FlatIndex struct + func NewFlatIndex(dim int, distanceKind DistanceKind) (*FlatIndex, error) + func (idx *FlatIndex) Add(vector VectorNode) error + func (idx *FlatIndex) Dimensions() int + func (idx *FlatIndex) DistanceKind() DistanceKind + func (idx *FlatIndex) Flush() error + func (idx *FlatIndex) Kind() VectorIndexKind + func (idx *FlatIndex) NewSearch() VectorSearch + func (idx *FlatIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *FlatIndex) Remove(vector VectorNode) error + func (idx *FlatIndex) Train(vectors []VectorNode) error + func (idx *FlatIndex) Trained() bool + func (idx *FlatIndex) WriteTo(w io.Writer) (int64, error) + type FullPrecisionQuantizer struct + func (q *FullPrecisionQuantizer) Dequantize(stored any) ([]float32, error) + func (q *FullPrecisionQuantizer) IsTrained() bool + func (q *FullPrecisionQuantizer) Quantize(vector []float32) (any, error) + func (q *FullPrecisionQuantizer) Train(vectors [][]float32) + func (q *FullPrecisionQuantizer) Type() QuantizerType + type Fusion interface + Combine func(vectorResults map[uint32]float64, textResults map[uint32]float64) map[uint32]float64 + Kind func() FusionKind + func DefaultFusion() Fusion + func NewFusion(kind FusionKind, config *FusionConfig) (Fusion, error) + type FusionConfig struct + K float64 + TextWeight float64 + VectorWeight float64 + func DefaultFusionConfig() *FusionConfig + type FusionKind string + const MaxFusion + const MinFusion + const ReciprocalRankFusion + const WeightedSumFusion + type HNSWIndex struct + M int + func NewHNSWIndex(dim int, distanceKind DistanceKind, m, efConstruction, efSearch int) (*HNSWIndex, error) + func (idx *HNSWIndex) Add(vector VectorNode) error + func (idx *HNSWIndex) Dimensions() int + func (idx *HNSWIndex) DistanceKind() DistanceKind + func (idx *HNSWIndex) Flush() error + func (idx *HNSWIndex) Kind() VectorIndexKind + func (idx *HNSWIndex) NewSearch() VectorSearch + func (idx *HNSWIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *HNSWIndex) Remove(vector VectorNode) error + func (idx *HNSWIndex) SetEfSearch(ef int) + func (idx *HNSWIndex) Train(vectors []VectorNode) error + func (idx *HNSWIndex) Trained() bool + func (idx *HNSWIndex) WriteTo(w io.Writer) (int64, error) + type HalfPrecisionQuantizer struct + func (q *HalfPrecisionQuantizer) Dequantize(stored any) ([]float32, error) + func (q *HalfPrecisionQuantizer) IsTrained() bool + func (q *HalfPrecisionQuantizer) Quantize(vector []float32) (any, error) + func (q *HalfPrecisionQuantizer) Train(vectors [][]float32) + func (q *HalfPrecisionQuantizer) Type() QuantizerType + type HybridSearch interface + Execute func() ([]HybridSearchResult, error) + WithCutoff func(cutoff int) HybridSearch + WithEfSearch func(efSearch int) HybridSearch + WithFusion func(fusion Fusion) HybridSearch + WithFusionKind func(kind FusionKind) HybridSearch + WithK func(k int) HybridSearch + WithMetadata func(filters ...Filter) HybridSearch + WithMetadataGroups func(groups ...*FilterGroup) HybridSearch + WithNProbes func(nProbes int) HybridSearch + WithScoreAggregation func(kind ScoreAggregationKind) HybridSearch + WithText func(queries ...string) HybridSearch + WithThreshold func(threshold float32) HybridSearch + WithVector func(query []float32) HybridSearch + type HybridSearchIndex interface + Add func(vector []float32, text string, metadata map[string]interface{}) (uint32, error) + AddWithID func(id uint32, vector []float32, text string, metadata map[string]interface{}) error + Flush func() error + MetadataIndex func() MetadataIndex + NewSearch func() HybridSearch + Remove func(id uint32) error + TextIndex func() TextIndex + Train func(vectors [][]float32) error + VectorIndex func() VectorIndex + WriteTo func(hybridWriter, vectorWriter, textWriter, metadataWriter io.Writer) error + func NewHybridSearchIndex(vectorIndex VectorIndex, textIndex TextIndex, metadataIndex MetadataIndex) HybridSearchIndex + type HybridSearchResult struct + ID uint32 + Score float64 + func (r HybridSearchResult) GetId() uint32 + func (r HybridSearchResult) GetScore() float32 + type IVFIndex struct + func NewIVFIndex(dim int, nlist int, distanceKind DistanceKind) (*IVFIndex, error) + func (idx *IVFIndex) Add(vector VectorNode) error + func (idx *IVFIndex) Dimensions() int + func (idx *IVFIndex) DistanceKind() DistanceKind + func (idx *IVFIndex) Flush() error + func (idx *IVFIndex) Kind() VectorIndexKind + func (idx *IVFIndex) NewSearch() VectorSearch + func (idx *IVFIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *IVFIndex) Remove(vector VectorNode) error + func (idx *IVFIndex) Train(vectors []VectorNode) error + func (idx *IVFIndex) Trained() bool + func (idx *IVFIndex) WriteTo(w io.Writer) (int64, error) + type IVFPQIndex struct + Ksub int + M int + Nbits int + func NewIVFPQIndex(dim int, distanceKind DistanceKind, nlist int, m int, nbits int) (*IVFPQIndex, error) + func (idx *IVFPQIndex) Add(vector VectorNode) error + func (idx *IVFPQIndex) Dimensions() int + func (idx *IVFPQIndex) DistanceKind() DistanceKind + func (idx *IVFPQIndex) Flush() error + func (idx *IVFPQIndex) Kind() VectorIndexKind + func (idx *IVFPQIndex) NewSearch() VectorSearch + func (idx *IVFPQIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *IVFPQIndex) Remove(vector VectorNode) error + func (idx *IVFPQIndex) Train(vectors []VectorNode) error + func (idx *IVFPQIndex) Trained() bool + func (idx *IVFPQIndex) WriteTo(w io.Writer) (int64, error) + type Int8Quantizer struct + func (q *Int8Quantizer) Dequantize(stored any) ([]float32, error) + func (q *Int8Quantizer) GetAbsMax() float32 + func (q *Int8Quantizer) IsTrained() bool + func (q *Int8Quantizer) Quantize(vector []float32) (any, error) + func (q *Int8Quantizer) SetAbsMax(absMax float32) + func (q *Int8Quantizer) Train(vectors [][]float32) + func (q *Int8Quantizer) Type() QuantizerType + type LogicOperator string + const AND + const OR + type MetadataFilterQueryBuilder struct + func NewMetadataFilterQuery() *MetadataFilterQueryBuilder + func (qb *MetadataFilterQueryBuilder) And(filters ...Filter) *MetadataFilterQueryBuilder + func (qb *MetadataFilterQueryBuilder) Build() []*FilterGroup + func (qb *MetadataFilterQueryBuilder) Execute(idx MetadataIndex) ([]MetadataResult, error) + func (qb *MetadataFilterQueryBuilder) Or(filters ...Filter) *MetadataFilterQueryBuilder + func (qb *MetadataFilterQueryBuilder) Where(filters ...Filter) *MetadataFilterQueryBuilder + type MetadataIndex interface + Add func(node MetadataNode) error + Flush func() error + NewSearch func() MetadataSearch + Remove func(node MetadataNode) error + type MetadataNode struct + func NewMetadataNode(metadata map[string]interface{}) *MetadataNode + func NewMetadataNodeWithID(id uint32, metadata map[string]interface{}) *MetadataNode + func (n *MetadataNode) ID() uint32 + func (n *MetadataNode) Metadata() map[string]interface{} + type MetadataResult struct + Node MetadataNode + func (r MetadataResult) GetId() uint32 + func (r MetadataResult) GetScore() float32 + type MetadataSearch interface + Execute func() ([]MetadataResult, error) + WithFilterGroups func(groups ...*FilterGroup) MetadataSearch + WithFilters func(filters ...Filter) MetadataSearch + type Operator string + const OpEqual + const OpExists + const OpGreaterThan + const OpGreaterThanOrEqual + const OpIn + const OpLessThan + const OpLessThanOrEqual + const OpNotEqual + const OpNotExists + const OpNotIn + const OpRange + type PQIndex struct + Ksub int + M int + Nbits int + func NewPQIndex(dim int, distanceKind DistanceKind, M int, Nbits int) (*PQIndex, error) + func (idx *PQIndex) Add(vector VectorNode) error + func (idx *PQIndex) Dimensions() int + func (idx *PQIndex) DistanceKind() DistanceKind + func (idx *PQIndex) Flush() error + func (idx *PQIndex) Kind() VectorIndexKind + func (idx *PQIndex) NewSearch() VectorSearch + func (idx *PQIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *PQIndex) Remove(vector VectorNode) error + func (idx *PQIndex) Train(vectors []VectorNode) error + func (idx *PQIndex) Trained() bool + func (idx *PQIndex) WriteTo(w io.Writer) (int64, error) + type Quantizer interface + Dequantize func(stored any) ([]float32, error) + IsTrained func() bool + Quantize func(vector []float32) (any, error) + Train func(vectors [][]float32) + Type func() QuantizerType + func NewQuantizer(qType QuantizerType) (Quantizer, error) + type QuantizerType string + const FullPrecision + const HalfPrecision + const Int8Precision + type Result interface + GetId func() uint32 + GetScore func() float32 + type RoaringMetadataIndex struct + func NewRoaringMetadataIndex() *RoaringMetadataIndex + func (idx *RoaringMetadataIndex) Add(node MetadataNode) error + func (idx *RoaringMetadataIndex) Flush() error + func (idx *RoaringMetadataIndex) NewSearch() MetadataSearch + func (idx *RoaringMetadataIndex) ReadFrom(r io.Reader) (int64, error) + func (idx *RoaringMetadataIndex) Remove(node MetadataNode) error + func (idx *RoaringMetadataIndex) WriteTo(w io.Writer) (int64, error) + type ScoreAggregationKind string + const MaxAggregation + const MeanAggregation + const SumAggregation + type SearchResult struct + DocID uint32 + Score float64 + type TextAggregation interface + Aggregate func(results []TextResult) []TextResult + Kind func() ScoreAggregationKind + func DefaultTextAggregation() TextAggregation + func NewTextAggregation(kind ScoreAggregationKind) (TextAggregation, error) + type TextIndex interface + Add func(id uint32, text string) error + Flush func() error + NewSearch func() TextSearch + Remove func(id uint32) error + type TextResult struct + Id uint32 + Score float32 + func (r TextResult) GetId() uint32 + func (r TextResult) GetScore() float32 + type TextSearch interface + Execute func() ([]TextResult, error) + WithCutoff func(cutoff int) TextSearch + WithDocumentIDs func(docIDs ...uint32) TextSearch + WithK func(k int) TextSearch + WithNode func(nodeIDs ...uint32) TextSearch + WithQuery func(queries ...string) TextSearch + WithScoreAggregation func(kind ScoreAggregationKind) TextSearch + type VectorAggregation interface + Aggregate func(results []VectorResult) []VectorResult + Kind func() ScoreAggregationKind + func DefaultVectorAggregation() VectorAggregation + func NewVectorAggregation(kind ScoreAggregationKind) (VectorAggregation, error) + type VectorIndex interface + Add func(vector VectorNode) error + Dimensions func() int + DistanceKind func() DistanceKind + Flush func() error + Kind func() VectorIndexKind + NewSearch func() VectorSearch + Remove func(vector VectorNode) error + Train func(vectors []VectorNode) error + Trained func() bool + type VectorIndexKind string + var FlatIndexKind VectorIndexKind = "flat" + var HNSWIndexKind VectorIndexKind = "hnsw" + var IVFIndexKind VectorIndexKind = "ivf" + var IVFPQIndexKind VectorIndexKind = "ivfpq" + var PQIndexKind VectorIndexKind = "pq" + type VectorNode struct + func NewVectorNode(vector []float32) *VectorNode + func NewVectorNodeWithID(id uint32, vector []float32) *VectorNode + func (n *VectorNode) ID() uint32 + func (n *VectorNode) Vector() []float32 + type VectorResult struct + Node VectorNode + Score float32 + func (r VectorResult) GetId() uint32 + func (r VectorResult) GetScore() float32 + type VectorSearch interface + Execute func() ([]VectorResult, error) + WithCutoff func(cutoff int) VectorSearch + WithDocumentIDs func(docIDs ...uint32) VectorSearch + WithEfSearch func(efSearch int) VectorSearch + WithK func(k int) VectorSearch + WithNProbes func(nProbes int) VectorSearch + WithNode func(nodeIDs ...uint32) VectorSearch + WithQuery func(queries ...[]float32) VectorSearch + WithScoreAggregation func(kind ScoreAggregationKind) VectorSearch + WithThreshold func(threshold float32) VectorSearch v0.1.0 Oct 14, 2025