mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-11 07:06:57 +08:00
Improved code [skip ci]
This commit is contained in:
@@ -258,7 +258,7 @@ List *HnswSearchLayer(Datum q, List *ep, int ef, int lc, Relation index, Fmgr
|
|||||||
HnswElement HnswGetEntryPoint(Relation index);
|
HnswElement HnswGetEntryPoint(Relation index);
|
||||||
HnswElement HnswInitElement(ItemPointer tid, int m, double ml, int maxLevel);
|
HnswElement HnswInitElement(ItemPointer tid, int m, double ml, int maxLevel);
|
||||||
void HnswFreeElement(HnswElement element);
|
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);
|
HnswElement HnswFindDuplicate(HnswElement e);
|
||||||
HnswCandidate *HnswEntryCandidate(HnswElement em, Datum q, Relation rel, FmgrInfo *procinfo, Oid collation, bool loadVec);
|
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);
|
void HnswUpdateMetaPage(Relation index, bool updateEntry, HnswElement entryPoint, BlockNumber insertPage, ForkNumber forkNum);
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ WriteElement(Relation index, FmgrInfo *procinfo, Oid collation, HnswElement elem
|
|||||||
if (entryPoint == NULL && newEntryPoint != NULL)
|
if (entryPoint == NULL && newEntryPoint != NULL)
|
||||||
{
|
{
|
||||||
/* Try again with new entry point */
|
/* 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);
|
UpdateNeighborPages(index, procinfo, collation, element, m);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -885,15 +885,15 @@ HnswUpdateConnection(HnswElement element, HnswCandidate * hc, int m, int lc, int
|
|||||||
* Algorithm 1 from paper
|
* Algorithm 1 from paper
|
||||||
*/
|
*/
|
||||||
void
|
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 *ep = NIL;
|
||||||
List *w;
|
List *w;
|
||||||
int level = element->level;
|
int level = element->level;
|
||||||
int entryLevel;
|
int entryLevel;
|
||||||
Datum q = PointerGetDatum(element->vec);
|
Datum q = PointerGetDatum(element->vec);
|
||||||
BlockNumber *skipPage = vacuuming ? &element->neighborPage : NULL;
|
BlockNumber *skipPage = existing ? &element->neighborPage : NULL;
|
||||||
OffsetNumber *skipOffno = vacuuming ? &element->neighborOffno : NULL;
|
OffsetNumber *skipOffno = existing ? &element->neighborOffno : NULL;
|
||||||
bool removeEntryPoint;
|
bool removeEntryPoint;
|
||||||
HnswCandidate *entryCandidate;
|
HnswCandidate *entryCandidate;
|
||||||
|
|
||||||
@@ -903,7 +903,7 @@ HnswInsertElement(HnswElement element, HnswElement entryPoint, Relation index, F
|
|||||||
entryCandidate = HnswEntryCandidate(entryPoint, q, index, procinfo, collation, true);
|
entryCandidate = HnswEntryCandidate(entryPoint, q, index, procinfo, collation, true);
|
||||||
ep = lappend(ep, entryCandidate);
|
ep = lappend(ep, entryCandidate);
|
||||||
entryLevel = entryPoint->level;
|
entryLevel = entryPoint->level;
|
||||||
removeEntryPoint = vacuuming && list_length(entryPoint->heaptids) == 0;
|
removeEntryPoint = existing && list_length(entryPoint->heaptids) == 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user