refactor(core): unify search invoke (#15)

Co-authored-by: feihongxu0824 <xufeihong.xfh@alibaba-inc.com>
This commit is contained in:
richyreachy 2026-02-03 12:40:23 +08:00 committed by GitHub
parent 6df6ba8fce
commit a20d484e9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 4 additions and 56 deletions

View File

@ -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 {

View File

@ -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();

View File

@ -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;

View File

@ -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,

View File

@ -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();

View File

@ -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;