mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-11 23:26:55 +08:00
Improved HNSW recall tests - #535
This commit is contained in:
@@ -8,6 +8,7 @@ my $node;
|
|||||||
my @queries = ();
|
my @queries = ();
|
||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
|
my $array_sql = join(",", ('random() * random()') x 3);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -54,7 +55,7 @@ $node->start;
|
|||||||
$node->safe_psql("postgres", "CREATE EXTENSION vector;");
|
$node->safe_psql("postgres", "CREATE EXTENSION vector;");
|
||||||
$node->safe_psql("postgres", "CREATE TABLE tst (i int4, v vector(3));");
|
$node->safe_psql("postgres", "CREATE TABLE tst (i int4, v vector(3));");
|
||||||
$node->safe_psql("postgres",
|
$node->safe_psql("postgres",
|
||||||
"INSERT INTO tst SELECT i, ARRAY[random(), random(), random()] FROM generate_series(1, 10000) i;"
|
"INSERT INTO tst SELECT i, ARRAY[$array_sql] FROM generate_series(1, 10000) i;"
|
||||||
);
|
);
|
||||||
|
|
||||||
# Generate queries
|
# Generate queries
|
||||||
@@ -90,7 +91,7 @@ for my $i (0 .. $#operators)
|
|||||||
));
|
));
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.80 : 0.99;
|
my $min = 0.99;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ my $node;
|
|||||||
my @queries = ();
|
my @queries = ();
|
||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
|
my $array_sql = join(",", ('random() * random()') x 3);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -83,7 +84,7 @@ for my $i (0 .. $#operators)
|
|||||||
[qr{^$}],
|
[qr{^$}],
|
||||||
"concurrent INSERTs",
|
"concurrent INSERTs",
|
||||||
{
|
{
|
||||||
"013_hnsw_insert_recall_$opclass" => "INSERT INTO tst (v) VALUES (ARRAY[random(), random(), random()]);"
|
"013_hnsw_insert_recall_$opclass" => "INSERT INTO tst (v) VALUES (ARRAY[$array_sql]);"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ for my $i (0 .. $#operators)
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.80 : 0.99;
|
my $min = 0.99;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ my @queries = ();
|
|||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
my $dim = 10;
|
my $dim = 10;
|
||||||
my $array_sql = join(",", ('random()') x $dim);
|
my $array_sql = join(",", ('2 * random() * random()') x $dim);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -94,7 +94,7 @@ for my $i (0 .. $#operators)
|
|||||||
));
|
));
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.93 : 0.98;
|
my $min = 0.98;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ my @queries = ();
|
|||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
my $dim = 10;
|
my $dim = 10;
|
||||||
my $array_sql = join(",", ('random()') x $dim);
|
my $array_sql = join(",", ('2 * random() * random()') x $dim);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,7 @@ for my $i (0 .. $#operators)
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.94 : 0.98;
|
my $min = 0.98;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ my $node;
|
|||||||
my @queries = ();
|
my @queries = ();
|
||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
|
my $array_sql = join(",", ('random() * random()') x 3);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -54,7 +55,7 @@ $node->start;
|
|||||||
$node->safe_psql("postgres", "CREATE EXTENSION vector;");
|
$node->safe_psql("postgres", "CREATE EXTENSION vector;");
|
||||||
$node->safe_psql("postgres", "CREATE TABLE tst (i int4, v sparsevec(3));");
|
$node->safe_psql("postgres", "CREATE TABLE tst (i int4, v sparsevec(3));");
|
||||||
$node->safe_psql("postgres",
|
$node->safe_psql("postgres",
|
||||||
"INSERT INTO tst SELECT i, ARRAY[random(), random(), random()]::vector::sparsevec FROM generate_series(1, 10000) i;"
|
"INSERT INTO tst SELECT i, ARRAY[$array_sql]::vector::sparsevec FROM generate_series(1, 10000) i;"
|
||||||
);
|
);
|
||||||
|
|
||||||
# Generate queries
|
# Generate queries
|
||||||
@@ -90,7 +91,7 @@ for my $i (0 .. $#operators)
|
|||||||
));
|
));
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.80 : 0.99;
|
my $min = 0.99;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ my $node;
|
|||||||
my @queries = ();
|
my @queries = ();
|
||||||
my @expected;
|
my @expected;
|
||||||
my $limit = 20;
|
my $limit = 20;
|
||||||
|
my $array_sql = join(",", ('random() * random()') x 3);
|
||||||
|
|
||||||
sub test_recall
|
sub test_recall
|
||||||
{
|
{
|
||||||
@@ -83,7 +84,7 @@ for my $i (0 .. $#operators)
|
|||||||
[qr{^$}],
|
[qr{^$}],
|
||||||
"concurrent INSERTs",
|
"concurrent INSERTs",
|
||||||
{
|
{
|
||||||
"025_hnsw_sparsevec_insert_recall_$opclass" => "INSERT INTO tst (v) VALUES (ARRAY[random(), random(), random()]::vector::sparsevec);"
|
"025_hnsw_sparsevec_insert_recall_$opclass" => "INSERT INTO tst (v) VALUES (ARRAY[$array_sql]::vector::sparsevec);"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -99,7 +100,7 @@ for my $i (0 .. $#operators)
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Test approximate results
|
# Test approximate results
|
||||||
my $min = $operator eq "<#>" ? 0.79 : 0.99;
|
my $min = 0.99;
|
||||||
test_recall($min, $operator);
|
test_recall($min, $operator);
|
||||||
|
|
||||||
$node->safe_psql("postgres", "DROP INDEX idx;");
|
$node->safe_psql("postgres", "DROP INDEX idx;");
|
||||||
|
|||||||
Reference in New Issue
Block a user