diff --git a/src/hnsw.h b/src/hnsw.h index b6f0e63..a5e4cdc 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -258,7 +258,7 @@ List *HnswSearchLayer(Datum q, List *ep, int ef, int lc, Relation index, Fmgr HnswElement HnswGetEntryPoint(Relation index); HnswElement HnswInitElement(ItemPointer tid, int m, double ml, int maxLevel); void HnswFreeElement(HnswElement element); -void HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, FmgrInfo *procinfo, Oid collation, int m, int efConstruction, bool vacuuming); +void HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, FmgrInfo *procinfo, Oid collation, int m, int efConstruction, bool existing); HnswElement HnswFindDuplicate(HnswElement e); HnswCandidate *HnswEntryCandidate(HnswElement em, Datum q, Relation rel, FmgrInfo *procinfo, Oid collation, bool loadVec); void HnswUpdateMetaPage(Relation index, bool updateEntry, HnswElement entryPoint, BlockNumber insertPage, ForkNumber forkNum); diff --git a/src/hnswinsert.c b/src/hnswinsert.c index 526c819..bd11a83 100644 --- a/src/hnswinsert.c +++ b/src/hnswinsert.c @@ -426,7 +426,7 @@ WriteElement(Relation index, FmgrInfo *procinfo, Oid collation, HnswElement elem if (entryPoint == NULL && newEntryPoint != NULL) { /* Try again with new entry point */ - HnswInsertElement(element, newEntryPoint, index, procinfo, collation, m, efConstruction, false); + HnswInsertElement(element, newEntryPoint, index, procinfo, collation, m, efConstruction, true); UpdateNeighborPages(index, procinfo, collation, element, m); } else diff --git a/src/hnswutils.c b/src/hnswutils.c index 9e4dbdc..f0f972b 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -885,15 +885,15 @@ HnswUpdateConnection(HnswElement element, HnswCandidate * hc, int m, int lc, int * Algorithm 1 from paper */ void -HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, FmgrInfo *procinfo, Oid collation, int m, int efConstruction, bool vacuuming) +HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, FmgrInfo *procinfo, Oid collation, int m, int efConstruction, bool existing) { List *ep = NIL; List *w; int level = element->level; int entryLevel; Datum q = PointerGetDatum(element->vec); - BlockNumber *skipPage = vacuuming ? &element->neighborPage : NULL; - OffsetNumber *skipOffno = vacuuming ? &element->neighborOffno : NULL; + BlockNumber *skipPage = existing ? &element->neighborPage : NULL; + OffsetNumber *skipOffno = existing ? &element->neighborOffno : NULL; bool removeEntryPoint; HnswCandidate *entryCandidate; @@ -903,7 +903,7 @@ HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, F entryCandidate = HnswEntryCandidate(entryPoint, q, index, procinfo, collation, true); ep = lappend(ep, entryCandidate); entryLevel = entryPoint->level; - removeEntryPoint = vacuuming && list_length(entryPoint->heaptids) == 0; + removeEntryPoint = existing && list_length(entryPoint->heaptids) == 0; } else {