diff --git a/src/core/algorithm/hnsw/hnsw_algorithm.cc b/src/core/algorithm/hnsw/hnsw_algorithm.cc index 9a41258..955d2f4 100644 --- a/src/core/algorithm/hnsw/hnsw_algorithm.cc +++ b/src/core/algorithm/hnsw/hnsw_algorithm.cc @@ -106,28 +106,6 @@ int HnswAlgorithm::search(HnswContext *ctx) const { return 0; } -int HnswAlgorithm::fast_search(HnswContext *ctx) const { - auto max_level = entity_.cur_max_level(); - auto entry_point = entity_.entry_point(); - - dist_t dist = ctx->dist_calculator().dist(entry_point); - for (level_t cur_level = max_level; cur_level >= 1; --cur_level) { - select_entry_point(cur_level, &entry_point, &dist, ctx); - } - - auto &topk_heap = ctx->topk_heap(); - topk_heap.clear(); - - search_neighbors(0, &entry_point, &dist, topk_heap, ctx); - - if (ctx->group_by_search()) { - expand_neighbors_by_group(topk_heap, ctx); - } - - return 0; -} - - //! select_entry_point on hnsw level, ef = 1 void HnswAlgorithm::select_entry_point(level_t level, node_id_t *entry_point, dist_t *dist, HnswContext *ctx) const { diff --git a/src/core/algorithm/hnsw/hnsw_algorithm.h b/src/core/algorithm/hnsw/hnsw_algorithm.h index b345484..886d870 100644 --- a/src/core/algorithm/hnsw/hnsw_algorithm.h +++ b/src/core/algorithm/hnsw/hnsw_algorithm.h @@ -43,14 +43,10 @@ class HnswAlgorithm { //! return 0 on success, or errCode in failure int add_node(node_id_t id, level_t level, HnswContext *ctx); - //! do knn search in graph with lock + //! do knn search in graph //! return 0 on success, or errCode in failure. results saved in ctx int search(HnswContext *ctx) const; - //! do knn search in graph without lock - //! return 0 on success, or errCode in failure. results saved in ctx - int fast_search(HnswContext *ctx) const; - //! Initiate HnswAlgorithm int init() { level_probas_.clear(); diff --git a/src/core/algorithm/hnsw/hnsw_searcher.cc b/src/core/algorithm/hnsw/hnsw_searcher.cc index ac3cdef..89535b2 100644 --- a/src/core/algorithm/hnsw/hnsw_searcher.cc +++ b/src/core/algorithm/hnsw/hnsw_searcher.cc @@ -218,7 +218,7 @@ int HnswSearcher::search_impl(const void *query, const IndexQueryMeta &qmeta, ctx->resize_results(count); for (size_t q = 0; q < count; ++q) { ctx->reset_query(query); - int ret = alg_->fast_search(ctx); + int ret = alg_->search(ctx); if (ailego_unlikely(ret != 0)) { LOG_ERROR("Hnsw searcher fast search failed"); return ret; diff --git a/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.cc b/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.cc index 6dd47a1..99b8058 100644 --- a/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.cc +++ b/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.cc @@ -108,28 +108,6 @@ int HnswSparseAlgorithm::search(HnswSparseContext *ctx) const { return 0; } -int HnswSparseAlgorithm::fast_search(HnswSparseContext *ctx) const { - auto max_level = entity_.cur_max_level(); - auto entry_point = entity_.entry_point(); - - dist_t dist = ctx->dist_calculator().dist(entry_point); - for (level_t cur_level = max_level; cur_level >= 1; --cur_level) { - select_entry_point(cur_level, &entry_point, &dist, ctx); - } - - auto &topk_heap = ctx->topk_heap(); - topk_heap.clear(); - - search_neighbors(0, &entry_point, &dist, topk_heap, ctx); - - if (ctx->group_by_search()) { - expand_neighbors_by_group(topk_heap, ctx); - } - - return 0; -} - - //! select_entry_point on hnsw level, ef = 1 void HnswSparseAlgorithm::select_entry_point(level_t level, node_id_t *entry_point, diff --git a/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.h b/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.h index fa5fab5..5a7093f 100644 --- a/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.h +++ b/src/core/algorithm/hnsw_sparse/hnsw_sparse_algorithm.h @@ -40,14 +40,10 @@ class HnswSparseAlgorithm { //! return 0 on success, or errCode in failure int add_node(node_id_t id, level_t level, HnswSparseContext *ctx); - //! do knn search in graph with lock + //! do knn search in graph //! return 0 on success, or errCode in failure. results saved in ctx int search(HnswSparseContext *ctx) const; - //! do knn search in graph without lock - //! return 0 on success, or errCode in failure. results saved in ctx - int fast_search(HnswSparseContext *ctx) const; - //! Initiate HnswAlgorithm int init() { level_probas_.clear(); diff --git a/src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.cc b/src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.cc index 9f1ee66..069532b 100644 --- a/src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.cc +++ b/src/core/algorithm/hnsw_sparse/hnsw_sparse_searcher.cc @@ -261,7 +261,7 @@ int HnswSparseSearcher::search_impl(const uint32_t *sparse_count, ctx->reset_query(sparse_query_buffer.data()); } - int ret = alg_->fast_search(ctx); + int ret = alg_->search(ctx); if (ailego_unlikely(ret != 0)) { LOG_ERROR("Hnsw searcher fast search failed"); return ret;