diff --git a/src/hnswutils.c b/src/hnswutils.c index 7eeb506..e91ddf4 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -777,7 +777,7 @@ CheckElementCloser(HnswCandidate * e, List *r, int lc, FmgrInfo *procinfo, Oid c * Algorithm 4 from paper */ static List * -SelectNeighbors(List *c, int m, int lc, FmgrInfo *procinfo, Oid collation, HnswElement e2, HnswCandidate * newCandidate, HnswCandidate * *pruned, bool sort) +SelectNeighbors(List *c, int m, int lc, FmgrInfo *procinfo, Oid collation, HnswElement e2, HnswCandidate * newCandidate, HnswCandidate * *pruned, bool sortCandidates) { List *r = NIL; List *w = list_copy(c); @@ -791,8 +791,8 @@ SelectNeighbors(List *c, int m, int lc, FmgrInfo *procinfo, Oid collation, HnswE wd = pairingheap_allocate(CompareNearestCandidates, NULL); - /* Ensure order is deterministic for closer caching */ - if (sort) + /* Ensure order of candidates is deterministic for closer caching */ + if (sortCandidates) list_sort(w, CompareCandidateDistances); while (list_length(w) > 0 && list_length(r) < m) @@ -845,8 +845,8 @@ SelectNeighbors(List *c, int m, int lc, FmgrInfo *procinfo, Oid collation, HnswE pairingheap_add(wd, &(CreatePairingHeapNode(e)->ph_node)); } - /* Only mark as set if sorted deterministically */ - e2->neighbors[lc].closerSet = sort; + /* Cached value can only be used in future if sorted deterministically */ + e2->neighbors[lc].closerSet = sortCandidates; /* Keep pruned connections */ while (!pairingheap_is_empty(wd) && list_length(r) < m)