Skip to content

Commit 57ef308

Browse files
committed
Write recall summary to file on CLI path of vectorbench
1 parent 1a394e9 commit 57ef308

4 files changed

Lines changed: 41 additions & 18 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,11 @@ nbdist/
256256
# Avoid ignoring PolySqlParser jar file (.jar files are usually ignored)
257257
!/libs/PolySqlParser-1.0.jar
258258

259+
# vectorbench CLI path
259260
/results.csv
260261
/results-pg.csv
261262
/recall-groundtruth.csv
263+
/recall.csv
262264

263265
# humble video libraries
264266
libhumblevideo-0.dll

src/main/java/org/polypheny/simpleclient/main/VectorBenchScenario.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.dql.SimpleKnnRealFeature;
3838
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.postgres.dql.PgSimpleKnnRealFeature;
3939
import java.io.File;
40+
import java.io.FileWriter;
4041
import java.io.IOException;
4142
import java.util.Objects;
4243
import java.util.Properties;
@@ -117,7 +118,8 @@ private static void runRecall( ExecutorFactory executorFactory, VectorBenchConfi
117118
if ( capture ) {
118119
evaluator.captureGroundTruth();
119120
} else {
120-
evaluator.evaluate();
121+
double recall = evaluator.evaluate();
122+
writeRecall( config, recall );
121123
}
122124
} finally {
123125
try {
@@ -129,6 +131,17 @@ private static void runRecall( ExecutorFactory executorFactory, VectorBenchConfi
129131
}
130132

131133

134+
/** Writes the recall@k of the last `recall` run to recall.csv in the working directory. */
135+
private static void writeRecall( VectorBenchConfig config, double recall ) {
136+
try ( FileWriter fw = new FileWriter( "recall.csv" ) ) {
137+
fw.write( "k,recall\n" );
138+
fw.write( config.limitKnnQueries + "," + recall + "\n" );
139+
} catch ( IOException e ) {
140+
log.error( "Could not write recall.csv", e );
141+
}
142+
}
143+
144+
132145
public static void data( ExecutorFactory executorFactory, int multiplier, boolean commitAfterEveryQuery ) {
133146
VectorBenchConfig config = new VectorBenchConfig( getProperties(), multiplier );
134147
VectorBench vectorBench = new VectorBench( executorFactory, config, commitAfterEveryQuery, false );

src/main/java/org/polypheny/simpleclient/scenario/vectorbench/VectorBench.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.polypheny.simpleclient.scenario.PolyphenyScenario;
4444
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.dql.SimpleKnnBooleanFeature;
4545
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.dql.SimpleKnnBooleanFeatureFiltered;
46+
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.dql.SimpleKnnIdIntFeature;
4647
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.dql.SimpleKnnRealFeatureFiltered;
4748
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.ddl.CreateBooleanFeature;
4849
import org.polypheny.simpleclient.scenario.vectorbench.queryBuilder.ddl.CreateIntFeature;
@@ -192,6 +193,9 @@ public long execute( ProgressReporter progressReporter, CsvWriter csvWriter, Fil
192193
addNumberOfTimes( queryList, new SimpleKnnRealFeatureFiltered( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.distanceNorm, "cat_A" ), config.numberOfSimpleKnnRealFeatureFilteredQueries );
193194
addNumberOfTimes( queryList, new SimpleKnnBooleanFeature( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.booleanDistanceNorm ), config.numberOfSimpleKnnBooleanFeatureQueries );
194195
addNumberOfTimes( queryList, new SimpleKnnBooleanFeatureFiltered( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.booleanDistanceNorm, "cat_A" ), config.numberOfSimpleKnnBooleanFeatureFilteredQueries );
196+
addNumberOfTimes( queryList, new MetadataKnnRealCrossJoin( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.distanceNorm ), config.numberOfMetadataKnnRealCrossJoinQueries );
197+
addNumberOfTimes( queryList, new SimpleKnnIdIntFeature( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.distanceNorm ), config.numberOfSimpleKnnIdIntFeatureQueries );
198+
195199

196200

197201
return commonExecute( queryList, progressReporter, outputDirectory, numberOfThreads, Query::getSql, () -> executorFactory.createExecutorInstance( csvWriter ), new Random() );
@@ -214,7 +218,7 @@ public void warmUp( ProgressReporter progressReporter ) {
214218
SimpleKnnRealFeatureFiltered simpleKnnRealFeatureFiltered = new SimpleKnnRealFeatureFiltered( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.distanceNorm, "cat_A" );
215219
SimpleKnnBooleanFeature simpleKnnBooleanFeature = new SimpleKnnBooleanFeature( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.booleanDistanceNorm );
216220
SimpleKnnBooleanFeatureFiltered simpleKnnBooleanFeatureFiltered = new SimpleKnnBooleanFeatureFiltered( config.randomSeedQuery, config.dimensionFeatureVectors, config.limitKnnQueries, config.booleanDistanceNorm, "cat_A" );
217-
221+
SimpleKnnIdIntFeature simpleKnnIdIntFeature = new SimpleKnnIdIntFeature( config.randomSeedQuery, config.dimensionFeatureVectors,config.limitKnnQueries, config.distanceNorm );
218222

219223
for ( int i = 0; i < config.numberOfWarmUpIterations; i++ ) {
220224
try {
@@ -234,6 +238,9 @@ public void warmUp( ProgressReporter progressReporter ) {
234238
if ( config.numberOfMetadataKnnIntFeatureQueries > 0 ) {
235239
executor.executeQuery( metadataKnnIntFeature.getNewQuery() );
236240
}
241+
if ( config.numberOfSimpleKnnIdIntFeatureQueries > 0 ) {
242+
executor.executeQuery( simpleKnnIdIntFeature.getNewQuery() );
243+
}
237244
if ( config.numberOfMetadataKnnRealFeatureQueries > 0 ) {
238245
executor.executeQuery( metadataKnnRealFeature.getNewQuery() );
239246
}

src/main/resources/org/polypheny/simpleclient/scenario/vectorbench/vector.properties

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ scenario = "vectorBench"
33
# Execution of queries on: polypheny | postgres
44
mode = polypheny
55

6-
dataStoreFeature = postgresql
6+
dataStoreFeature = postgresql1
77
dataStoreMeta = hsqldb
88

99
# Default, pgvector, PostGIS, pgvector & PostGIS
10-
postgresImageVariant = Default
10+
postgresImageVariant = pgvector & PostGIS
1111

1212
# true => DDL: REAL NOT NULL ARRAY(1,3)
1313
# false => DDL: REAL ARRAY(1,3)
1414
# Note: Ignored by direct postgres path
15-
supportsNotNullArray = false
15+
supportsNotNullArray = true
1616

1717
# False -> Does not create index
1818
# Note: When run in cli, vector index will not create indexes if set to false
@@ -27,21 +27,22 @@ queryEfSearch = 40
2727
queryProbes = 1
2828
# ---------------------------------------------------------------------------------------
2929

30+
# Number of sampled query vectors used to compute recall@k
31+
# Note: CLI path only
32+
numberOfRecallQueries = 100
33+
3034
# Vector index settings,
3135
# Method: hnsw or ivfflat
32-
indexMethod = ivfflat
36+
indexMethod = hnsw
3337
# Only used for HNSW index
3438
indexM = 16
3539
indexEfConstruction = 64
3640
# Only used for IVFFlat index
3741
indexLists = 100
3842

39-
# Number of sampled query vectors used to compute recall@k
40-
numberOfRecallQueries = 100
41-
4243
# PostgreSQL direct connect settings
4344
# Used when mode = postgres
44-
postgresHost = 127.0.0.1
45+
postgresHost = localhost
4546

4647
numberOfThreads = 4
4748
progressReportBase = 100
@@ -65,19 +66,19 @@ numberOfSimpleKnnIntFeatureQueries = 0
6566
numberOfSimpleKnnIdIntFeatureQueries = 0
6667
numberOfMetadataKnnIntFeatureQueries = 0
6768

68-
numberOfSimpleMetadataQueries = 10
69+
numberOfSimpleMetadataQueries = 0
6970

7071
# Real (float vector mapping)
71-
numberOfSimpleKnnRealFeatureQueries = 10
72-
numberOfSimpleKnnIdRealFeatureQueries = 10
73-
numberOfMetadataKnnRealFeatureQueries = 10
74-
numberOfSimpleKnnRealCrossJoinQueries = 10
75-
numberOfMetadataKnnRealCrossJoinQueries = 10
76-
numberOfSimpleKnnRealFeatureFilteredQueries = 10
72+
numberOfSimpleKnnRealFeatureQueries = 0
73+
numberOfSimpleKnnIdRealFeatureQueries = 0
74+
numberOfMetadataKnnRealFeatureQueries = 0
75+
numberOfSimpleKnnRealCrossJoinQueries = 0
76+
numberOfMetadataKnnRealCrossJoinQueries = 0
77+
numberOfSimpleKnnRealFeatureFilteredQueries = 0
7778

7879
# Boolean (bit vector mapping)
7980
numberOfSimpleKnnBooleanFeatureFilteredQueries = 10
80-
numberOfSimpleKnnBooleanFeatureQueries = 10
81+
numberOfSimpleKnnBooleanFeatureQueries = 0
8182

8283

8384
limitKnnQueries = 10

0 commit comments

Comments
 (0)