Skip to content

Conversation

@matthewmcneely
Copy link
Contributor

@matthewmcneely matthewmcneely commented Jan 8, 2026

Summary

This PR fixes a critical bug in HNSW vector search where cosine similarity and dot product metrics returned incorrect results. The search algorithm was treating all metrics as distance metrics (lower is better), causing similarity metrics (higher is better) to return the worst matches instead of the best.

Problem

The HNSW implementation had two issues with similarity-based metrics:

  1. Search phase: The candidate heap in persistent_hnsw.go::searchPersistentLayer always used a min-heap, which pops the lowest value first. For similarity metrics where higher values are better, this caused the algorithm to explore the worst candidates first and terminate prematurely.

  2. Edge pruning phase: The helper.go::addNeighbors function used a fixed comparison (>) when pruning edges, which is correct for distance metrics but inverted for similarity metrics. This resulted in keeping the worst edges instead of the best.

Root Cause

The original code assumed all metrics behave like distance metrics:

// Always used min-heap (pops lowest first)
candidateHeap := *buildPersistentHeapByInit(elements)

// Edge pruning always used > comparison
compare: func(i, j uint64) bool {
    return ph.distance_betw(..., i, ...) > ph.distance_betw(..., j, ...)
}

For Euclidean distance, lower values = better matches → min-heap is correct.
For Cosine/DotProduct similarity, higher values = better matches → need max-heap.

Solution

1. Added candidateHeap interface with metric-aware heap selection

type candidateHeap[T c.Float] interface {
    Len() int
    Pop() minPersistentHeapElement[T]
    Push(minPersistentHeapElement[T])
    PopLast() minPersistentHeapElement[T]
}

func buildCandidateHeap[T c.Float](array []minPersistentHeapElement[T], isSimilarityMetric bool) candidateHeap[T] {
    if isSimilarityMetric {
        return &maxHeapWrapper[T]{...}  // Pops highest first
    }
    return &minHeapWrapper[T]{...}      // Pops lowest first
}

2. Added isSimilarityMetric flag to SimilarityType

type SimilarityType[T c.Float] struct {
    // ... existing fields
    isSimilarityMetric bool  // true for cosine, dotproduct; false for euclidean
}

3. Fixed edge pruning comparison in addNeighbors

compare: func(i, j uint64) bool {
    distI := ph.distance_betw(ctx, tc, uuid, i, &inVec, &outVec)
    distJ := ph.distance_betw(ctx, tc, uuid, j, &inVec, &outVec)
    return !ph.simType.isBetterScore(distI, distJ)
}

Files Changed

File Changes
tok/hnsw/heap.go Added candidateHeap interface, minHeapWrapper, maxHeapWrapper, and buildCandidateHeap factory
tok/hnsw/helper.go Added isSimilarityMetric field to SimilarityType; fixed edge pruning comparison
tok/hnsw/persistent_hnsw.go Updated searchPersistentLayer to use metric-aware candidate heap
tok/hnsw/persistent_hnsw_test.go Added comprehensive unit tests for heap behavior and search correctness

Testing

Added new tests covering:

  • TestCandidateHeapMinHeap: Verifies min-heap pops in ascending order
  • TestCandidateHeapMaxHeap: Verifies max-heap pops in descending order
  • TestCandidateHeapPushPop: Tests Push/Pop operations for both heap types
  • TestCandidateHeapPopLast: Tests PopLast for both types
  • TestSimilarityTypeIsSimilarityMetric: Verifies flag is set correctly for each metric
  • TestSearchReturnsCorrectOrderForAllMetrics: End-to-end test for Euclidean, Cosine, and DotProduct
  • TestEdgePruningKeepsBestEdges: Verifies edge pruning keeps best edges for each metric

Performance Note

This fix builds on PR #9514 which corrected the early termination condition. Together, these changes ensure HNSW search explores the correct number of candidates and returns properly ordered results.

Users experiencing slower insert/search times compared to v25.1.0 can tune performance by lowering efConstruction and efSearch parameters when creating your vector indexes.

Lower values trade recall for speed. The default values (efConstruction=128, efSearch=64) prioritize recall.

GenAI Notice

Parts of this implementation and all of the testing was generated using Claude Opus 4.5 (thinking).

Checklist

  • The PR title follows the
    Conventional Commits syntax, leading
    with fix:, feat:, chore:, ci:, etc.
  • Code compiles correctly and linting (via trunk) passes locally
  • Tests added for new functionality, or regression tests for bug fixes added as applicable

Fixes #9558

Benchmarks

Our BEIR SciFact Information Retrieval Benchmarks now show recall rates close to or exceeding acceptable and excellent performance for all metrics.

============================================================================================================================================
NDCG@k Comparison
============================================================================================================================================

NDCG@1:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████░░░░░░░░░░░░ 0.6200
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████░░░░░░░░░░░░░░░ 0.5200
  Dgraph v25.1.0 (euclidean)                           ███████████████░░░░░░░░░░░░░░░ 0.5000
  Dgraph v25.1.0 (cosine)                              ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2767
  Dgraph v25.1.0 (dotproduct)                          ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2867
  Dgraph staged-fix (euclidean)                        ███████████████░░░░░░░░░░░░░░░ 0.5233
  Dgraph staged-fix (cosine)                           ███████████████░░░░░░░░░░░░░░░ 0.5300
  Dgraph staged-fix (dotproduct)                       ███████████████░░░░░░░░░░░░░░░ 0.5167

NDCG@3:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████░░░░░░░░░░ 0.6700
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████░░░░░░░░░░░░ 0.6000
  Dgraph v25.1.0 (euclidean)                           ████████████████░░░░░░░░░░░░░░ 0.5588
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3043
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3164
  Dgraph staged-fix (euclidean)                        █████████████████░░░░░░░░░░░░░ 0.5918
  Dgraph staged-fix (cosine)                           █████████████████░░░░░░░░░░░░░ 0.5957
  Dgraph staged-fix (dotproduct)                       █████████████████░░░░░░░░░░░░░ 0.5830

NDCG@5:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████░░░░░░░░░░ 0.6900
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████░░░░░░░░░░░░ 0.6300
  Dgraph v25.1.0 (euclidean)                           █████████████████░░░░░░░░░░░░░ 0.5858
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3197
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3290
  Dgraph staged-fix (euclidean)                        ██████████████████░░░░░░░░░░░░ 0.6168
  Dgraph staged-fix (cosine)                           ██████████████████░░░░░░░░░░░░ 0.6240
  Dgraph staged-fix (dotproduct)                       ██████████████████░░░░░░░░░░░░ 0.6081

NDCG@10:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) █████████████████████░░░░░░░░░ 0.7000
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████████░░░░░░░░░░░ 0.6500
  Dgraph v25.1.0 (euclidean)                           ██████████████████░░░░░░░░░░░░ 0.6118
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3305
  Dgraph v25.1.0 (dotproduct)                          ██████████░░░░░░░░░░░░░░░░░░░░ 0.3423
  Dgraph staged-fix (euclidean)                        ███████████████████░░░░░░░░░░░ 0.6461
  Dgraph staged-fix (cosine)                           ███████████████████░░░░░░░░░░░ 0.6505
  Dgraph staged-fix (dotproduct)                       ███████████████████░░░░░░░░░░░ 0.6369

NDCG@100:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) █████████████████████░░░░░░░░░ 0.7200
  BEIR Acceptable (Acceptable baseline (384-dim))      ████████████████████░░░░░░░░░░ 0.6800
  Dgraph v25.1.0 (euclidean)                           ███████████████████░░░░░░░░░░░ 0.6418
  Dgraph v25.1.0 (cosine)                              ██████████░░░░░░░░░░░░░░░░░░░░ 0.3445
  Dgraph v25.1.0 (dotproduct)                          ██████████░░░░░░░░░░░░░░░░░░░░ 0.3555
  Dgraph staged-fix (euclidean)                        ████████████████████░░░░░░░░░░ 0.6794
  Dgraph staged-fix (cosine)                           ████████████████████░░░░░░░░░░ 0.6849
  Dgraph staged-fix (dotproduct)                       ████████████████████░░░░░░░░░░ 0.6707

============================================================================================================================================
MAP@k Comparison
============================================================================================================================================

MAP@1:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████░░░░░░░░░░░░ 0.6000
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████░░░░░░░░░░░░░░░ 0.5000
  Dgraph v25.1.0 (euclidean)                           ██████████████░░░░░░░░░░░░░░░░ 0.4812
  Dgraph v25.1.0 (cosine)                              ███████░░░░░░░░░░░░░░░░░░░░░░░ 0.2586
  Dgraph v25.1.0 (dotproduct)                          ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2747
  Dgraph staged-fix (euclidean)                        ███████████████░░░░░░░░░░░░░░░ 0.5046
  Dgraph staged-fix (cosine)                           ███████████████░░░░░░░░░░░░░░░ 0.5112
  Dgraph staged-fix (dotproduct)                       ██████████████░░░░░░░░░░░░░░░░ 0.4979

MAP@3:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ███████████████████░░░░░░░░░░░ 0.6400
  BEIR Acceptable (Acceptable baseline (384-dim))      █████████████████░░░░░░░░░░░░░ 0.5700
  Dgraph v25.1.0 (euclidean)                           ████████████████░░░░░░░░░░░░░░ 0.5357
  Dgraph v25.1.0 (cosine)                              ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2883
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3022
  Dgraph staged-fix (euclidean)                        ████████████████░░░░░░░░░░░░░░ 0.5663
  Dgraph staged-fix (cosine)                           █████████████████░░░░░░░░░░░░░ 0.5707
  Dgraph staged-fix (dotproduct)                       ████████████████░░░░░░░░░░░░░░ 0.5579

MAP@5:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ███████████████████░░░░░░░░░░░ 0.6600
  BEIR Acceptable (Acceptable baseline (384-dim))      █████████████████░░░░░░░░░░░░░ 0.5900
  Dgraph v25.1.0 (euclidean)                           ████████████████░░░░░░░░░░░░░░ 0.5544
  Dgraph v25.1.0 (cosine)                              ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2993
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3113
  Dgraph staged-fix (euclidean)                        █████████████████░░░░░░░░░░░░░ 0.5838
  Dgraph staged-fix (cosine)                           █████████████████░░░░░░░░░░░░░ 0.5902
  Dgraph staged-fix (dotproduct)                       █████████████████░░░░░░░░░░░░░ 0.5755

MAP@10:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████░░░░░░░░░░ 0.6700
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████░░░░░░░░░░░░ 0.6000
  Dgraph v25.1.0 (euclidean)                           █████████████████░░░░░░░░░░░░░ 0.5676
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3045
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3175
  Dgraph staged-fix (euclidean)                        █████████████████░░░░░░░░░░░░░ 0.5987
  Dgraph staged-fix (cosine)                           ██████████████████░░░░░░░░░░░░ 0.6035
  Dgraph staged-fix (dotproduct)                       █████████████████░░░░░░░░░░░░░ 0.5900

MAP@100:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████░░░░░░░░░░ 0.6800
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████░░░░░░░░░░░░ 0.6100
  Dgraph v25.1.0 (euclidean)                           █████████████████░░░░░░░░░░░░░ 0.5746
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3074
  Dgraph v25.1.0 (dotproduct)                          █████████░░░░░░░░░░░░░░░░░░░░░ 0.3203
  Dgraph staged-fix (euclidean)                        ██████████████████░░░░░░░░░░░░ 0.6060
  Dgraph staged-fix (cosine)                           ██████████████████░░░░░░░░░░░░ 0.6113
  Dgraph staged-fix (dotproduct)                       █████████████████░░░░░░░░░░░░░ 0.5977

============================================================================================================================================
RECALL@k Comparison
============================================================================================================================================

Recall@1:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████░░░░░░░░░░░░ 0.6000
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████░░░░░░░░░░░░░░░ 0.5000
  Dgraph v25.1.0 (euclidean)                           ██████████████░░░░░░░░░░░░░░░░ 0.4812
  Dgraph v25.1.0 (cosine)                              ███████░░░░░░░░░░░░░░░░░░░░░░░ 0.2586
  Dgraph v25.1.0 (dotproduct)                          ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2747
  Dgraph staged-fix (euclidean)                        ███████████████░░░░░░░░░░░░░░░ 0.5046
  Dgraph staged-fix (cosine)                           ███████████████░░░░░░░░░░░░░░░ 0.5112
  Dgraph staged-fix (dotproduct)                       ██████████████░░░░░░░░░░░░░░░░ 0.4979

Recall@3:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) █████████████████████░░░░░░░░░ 0.7300
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████████░░░░░░░░░░░ 0.6500
  Dgraph v25.1.0 (euclidean)                           █████████████████░░░░░░░░░░░░░ 0.5984
  Dgraph v25.1.0 (cosine)                              █████████░░░░░░░░░░░░░░░░░░░░░ 0.3248
  Dgraph v25.1.0 (dotproduct)                          ██████████░░░░░░░░░░░░░░░░░░░░ 0.3377
  Dgraph staged-fix (euclidean)                        ███████████████████░░░░░░░░░░░ 0.6384
  Dgraph staged-fix (cosine)                           ███████████████████░░░░░░░░░░░ 0.6401
  Dgraph staged-fix (dotproduct)                       ██████████████████░░░░░░░░░░░░ 0.6284

Recall@5:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ███████████████████████░░░░░░░ 0.7900
  BEIR Acceptable (Acceptable baseline (384-dim))      █████████████████████░░░░░░░░░ 0.7200
  Dgraph v25.1.0 (euclidean)                           ███████████████████░░░░░░░░░░░ 0.6638
  Dgraph v25.1.0 (cosine)                              ██████████░░░░░░░░░░░░░░░░░░░░ 0.3632
  Dgraph v25.1.0 (dotproduct)                          ███████████░░░░░░░░░░░░░░░░░░░ 0.3697
  Dgraph staged-fix (euclidean)                        ████████████████████░░░░░░░░░░ 0.6988
  Dgraph staged-fix (cosine)                           █████████████████████░░░░░░░░░ 0.7088
  Dgraph staged-fix (dotproduct)                       ████████████████████░░░░░░░░░░ 0.6888

Recall@10:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) █████████████████████████░░░░░ 0.8400
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████████████░░░░░░░ 0.7800
  Dgraph v25.1.0 (euclidean)                           ██████████████████████░░░░░░░░ 0.7368
  Dgraph v25.1.0 (cosine)                              ███████████░░░░░░░░░░░░░░░░░░░ 0.3950
  Dgraph v25.1.0 (dotproduct)                          ████████████░░░░░░░░░░░░░░░░░░ 0.4074
  Dgraph staged-fix (euclidean)                        ███████████████████████░░░░░░░ 0.7808
  Dgraph staged-fix (cosine)                           ███████████████████████░░░░░░░ 0.7834
  Dgraph staged-fix (dotproduct)                       ███████████████████████░░░░░░░ 0.7701

Recall@100:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████████████░░ 0.9500
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████████████████░░░ 0.9000
  Dgraph v25.1.0 (euclidean)                           ██████████████████████████░░░░ 0.8717
  Dgraph v25.1.0 (cosine)                              █████████████░░░░░░░░░░░░░░░░░ 0.4589
  Dgraph v25.1.0 (dotproduct)                          █████████████░░░░░░░░░░░░░░░░░ 0.4658
  Dgraph staged-fix (euclidean)                        ████████████████████████████░░ 0.9350
  Dgraph staged-fix (cosine)                           ████████████████████████████░░ 0.9417
  Dgraph staged-fix (dotproduct)                       ███████████████████████████░░░ 0.9250

============================================================================================================================================
PRECISION@k Comparison
============================================================================================================================================

Precision@1:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████░░░░░░░░░░░░ 0.6200
  BEIR Acceptable (Acceptable baseline (384-dim))      ███████████████░░░░░░░░░░░░░░░ 0.5200
  Dgraph v25.1.0 (euclidean)                           ███████████████░░░░░░░░░░░░░░░ 0.5000
  Dgraph v25.1.0 (cosine)                              ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2767
  Dgraph v25.1.0 (dotproduct)                          ████████░░░░░░░░░░░░░░░░░░░░░░ 0.2867
  Dgraph staged-fix (euclidean)                        ███████████████░░░░░░░░░░░░░░░ 0.5233
  Dgraph staged-fix (cosine)                           ███████████████░░░░░░░░░░░░░░░ 0.5300
  Dgraph staged-fix (dotproduct)                       ███████████████░░░░░░░░░░░░░░░ 0.5167

Precision@3:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████████████████ 0.2700
  BEIR Acceptable (Acceptable baseline (384-dim))      █████████████████████████░░░░░ 0.2300
  Dgraph v25.1.0 (euclidean)                           ████████████████████████░░░░░░ 0.2178
  Dgraph v25.1.0 (cosine)                              █████████████░░░░░░░░░░░░░░░░░ 0.1211
  Dgraph v25.1.0 (dotproduct)                          █████████████░░░░░░░░░░░░░░░░░ 0.1211
  Dgraph staged-fix (euclidean)                        █████████████████████████░░░░░ 0.2311
  Dgraph staged-fix (cosine)                           █████████████████████████░░░░░ 0.2322
  Dgraph staged-fix (dotproduct)                       █████████████████████████░░░░░ 0.2278

Precision@5:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████████████████ 0.1800
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████████████░░░░ 0.1600
  Dgraph v25.1.0 (euclidean)                           ████████████████████████░░░░░░ 0.1480
  Dgraph v25.1.0 (cosine)                              █████████████░░░░░░░░░░░░░░░░░ 0.0827
  Dgraph v25.1.0 (dotproduct)                          █████████████░░░░░░░░░░░░░░░░░ 0.0807
  Dgraph staged-fix (euclidean)                        █████████████████████████░░░░░ 0.1553
  Dgraph staged-fix (cosine)                           ██████████████████████████░░░░ 0.1573
  Dgraph staged-fix (dotproduct)                       █████████████████████████░░░░░ 0.1533

Precision@10:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ██████████████████████████████ 0.1000
  BEIR Acceptable (Acceptable baseline (384-dim))      ██████████████████████████░░░░ 0.0900
  Dgraph v25.1.0 (euclidean)                           █████████████████████████░░░░░ 0.0837
  Dgraph v25.1.0 (cosine)                              █████████████░░░░░░░░░░░░░░░░░ 0.0453
  Dgraph v25.1.0 (dotproduct)                          █████████████░░░░░░░░░░░░░░░░░ 0.0447
  Dgraph staged-fix (euclidean)                        ██████████████████████████░░░░ 0.0887
  Dgraph staged-fix (cosine)                           ██████████████████████████░░░░ 0.0887
  Dgraph staged-fix (dotproduct)                       ██████████████████████████░░░░ 0.0873

Precision@100:
--------------------------------------------------------------------------------------------------------------------------------------------
  BEIR Excellent (State-of-the-art baseline (768-dim)) ████████████████████████████░░ 0.0100
  BEIR Acceptable (Acceptable baseline (384-dim))      ████████████████████████████░░ 0.0100
  Dgraph v25.1.0 (euclidean)                           ███████████████████████████░░░ 0.0100
  Dgraph v25.1.0 (cosine)                              ██████████████░░░░░░░░░░░░░░░░ 0.0053
  Dgraph v25.1.0 (dotproduct)                          ██████████████░░░░░░░░░░░░░░░░ 0.0051
  Dgraph staged-fix (euclidean)                        █████████████████████████████░ 0.0106
  Dgraph staged-fix (cosine)                           ██████████████████████████████ 0.0107
  Dgraph staged-fix (dotproduct)                       █████████████████████████████░ 0.0105

Previous impl assumed lower values were better (distance) which was breaking similarity search (cosine, dotp)
@matthewmcneely matthewmcneely requested a review from a team as a code owner January 8, 2026 02:09
@github-actions github-actions bot added area/testing Testing related issues go Pull requests that update Go code labels Jan 8, 2026
@matthewmcneely
Copy link
Contributor Author

@joelamming As someone who's crawled around in this tokenizer, would you be willing to take a look at this PR for correctness/completeness?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/testing Testing related issues go Pull requests that update Go code

Development

Successfully merging this pull request may close these issues.

Bug: searches on vectors indexed using cosine and dotproduct metrics perform poorly

2 participants