diff --git a/src/ivfflat.c b/src/ivfflat.c index 677178c..8164aec 100644 --- a/src/ivfflat.c +++ b/src/ivfflat.c @@ -13,6 +13,7 @@ #endif int ivfflat_probes; +int ivfflat_bound; static relopt_kind ivfflat_relopt_kind; /* @@ -32,6 +33,10 @@ _PG_init(void) DefineCustomIntVariable("ivfflat.probes", "Sets the number of probes", "Valid range is 1..lists.", &ivfflat_probes, 1, 1, IVFFLAT_MAX_LISTS, PGC_USERSET, 0, NULL, NULL, NULL); + + DefineCustomIntVariable("ivfflat.bound", "Sets the max results from index (experimental)", + NULL, &ivfflat_bound, + 0, 0, INT_MAX, PGC_USERSET, 0, NULL, NULL, NULL); } /* diff --git a/src/ivfflat.h b/src/ivfflat.h index 5bd7622..88755f0 100644 --- a/src/ivfflat.h +++ b/src/ivfflat.h @@ -78,6 +78,7 @@ /* Variables */ extern int ivfflat_probes; +extern int ivfflat_bound; /* Exported functions */ PGDLLEXPORT void _PG_init(void); diff --git a/src/ivfscan.c b/src/ivfscan.c index ce53053..fdc1a83 100644 --- a/src/ivfscan.c +++ b/src/ivfscan.c @@ -126,6 +126,10 @@ GetScanItems(IndexScanDesc scan, Datum value) */ BufferAccessStrategy bas = GetAccessStrategy(BAS_BULKREAD); + /* Set the max number of results */ + if (ivfflat_bound > 0) + tuplesort_set_bound(so->sortstate, ivfflat_bound); + /* Search closest probes lists */ while (!pairingheap_is_empty(so->listQueue)) {