From d7d8b9fac05ce035dcb4c7dd545da09eebe1f547 Mon Sep 17 00:00:00 2001 From: Aaron Lin Date: Mon, 17 Mar 2025 16:20:10 -0700 Subject: [PATCH 1/3] fix reranking issue in batch iterator --- include/svs/index/vamana/iterator.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/svs/index/vamana/iterator.h b/include/svs/index/vamana/iterator.h index 84c8af0e..38e28d26 100644 --- a/include/svs/index/vamana/iterator.h +++ b/include/svs/index/vamana/iterator.h @@ -334,6 +334,18 @@ class BatchIterator { ) { auto search_closure = [&](const auto& query, const auto& accessor, auto& d, auto& buffer) { + constexpr vamana::extensions::UsesReranking> uses_reranking{}; + if constexpr(uses_reranking()) { + // recompute search buffer using only primary dataset + for (size_t j = 0, jmax = buffer.size(); j < jmax; ++j) { + auto& neighbor = buffer[j]; + auto id = neighbor.id(); + auto new_distance = distance::compute(d, query, data.get_primary(id)); + neighbor.set_distance(new_distance); + } + buffer.sort(); + } + vamana::greedy_search( graph, data, From d5fa52327cf01cb5090088c630c14ef5f1454400 Mon Sep 17 00:00:00 2001 From: Aaron Lin Date: Mon, 17 Mar 2025 17:16:13 -0700 Subject: [PATCH 2/3] remove reference and enable clang format --- include/svs/index/vamana/iterator.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/svs/index/vamana/iterator.h b/include/svs/index/vamana/iterator.h index 38e28d26..045f5f61 100644 --- a/include/svs/index/vamana/iterator.h +++ b/include/svs/index/vamana/iterator.h @@ -334,13 +334,16 @@ class BatchIterator { ) { auto search_closure = [&](const auto& query, const auto& accessor, auto& d, auto& buffer) { - constexpr vamana::extensions::UsesReranking> uses_reranking{}; - if constexpr(uses_reranking()) { + constexpr vamana::extensions::UsesReranking< + std::remove_const_t>> + uses_reranking{}; + if constexpr (uses_reranking()) { // recompute search buffer using only primary dataset for (size_t j = 0, jmax = buffer.size(); j < jmax; ++j) { auto& neighbor = buffer[j]; auto id = neighbor.id(); - auto new_distance = distance::compute(d, query, data.get_primary(id)); + auto new_distance = + distance::compute(d, query, data.get_primary(id)); neighbor.set_distance(new_distance); } buffer.sort(); From 9dfa840839c6c4b0b3cb7a11c02e31679ce0ecf3 Mon Sep 17 00:00:00 2001 From: Aaron Lin Date: Tue, 18 Mar 2025 21:37:53 -0700 Subject: [PATCH 3/3] add fix argument --- include/svs/index/vamana/iterator.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/svs/index/vamana/iterator.h b/include/svs/index/vamana/iterator.h index 045f5f61..d1214fa3 100644 --- a/include/svs/index/vamana/iterator.h +++ b/include/svs/index/vamana/iterator.h @@ -338,6 +338,7 @@ class BatchIterator { std::remove_const_t>> uses_reranking{}; if constexpr (uses_reranking()) { + distance::maybe_fix_argument(d, query); // recompute search buffer using only primary dataset for (size_t j = 0, jmax = buffer.size(); j < jmax; ++j) { auto& neighbor = buffer[j];