Skip to content

Commit 3f20296

Browse files
committed
improving tests with null checks and added diskbbq format to densevectorfieldtype test
1 parent 78a0ecb commit 3f20296

File tree

8 files changed

+36
-14
lines changed

8 files changed

+36
-14
lines changed

server/src/internalClusterTest/java/org/elasticsearch/search/query/RescoreKnnVectorQueryIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private record TestParams(
116116
float[] queryVector,
117117
int k,
118118
int numCands,
119-
float visitPercentage,
119+
Float visitPercentage,
120120
RescoreVectorBuilder rescoreVectorBuilder
121121
) {
122122
public static TestParams generate() {
@@ -129,7 +129,7 @@ public static TestParams generate() {
129129
randomVector(numDims),
130130
k,
131131
(int) (k * randomFloatBetween(1.0f, 10.0f, true)),
132-
randomFloatBetween(0.0f, 100.0f, true),
132+
randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true),
133133
new RescoreVectorBuilder(randomFloatBetween(1.0f, 100f, true))
134134
);
135135
}

server/src/test/java/org/elasticsearch/index/mapper/vectors/DenseVectorFieldTypeTests.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,29 @@
2525
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.VectorSimilarity;
2626
import org.elasticsearch.search.DocValueFormat;
2727
import org.elasticsearch.search.vectors.DenseVectorQuery;
28+
import org.elasticsearch.search.vectors.DiversifyingChildrenIVFKnnFloatVectorQuery;
2829
import org.elasticsearch.search.vectors.DiversifyingParentBlockQuery;
2930
import org.elasticsearch.search.vectors.ESKnnByteVectorQuery;
3031
import org.elasticsearch.search.vectors.ESKnnFloatVectorQuery;
32+
import org.elasticsearch.search.vectors.IVFKnnFloatVectorQuery;
3133
import org.elasticsearch.search.vectors.RescoreKnnVectorQuery;
3234
import org.elasticsearch.search.vectors.VectorData;
3335

3436
import java.io.IOException;
37+
import java.util.ArrayList;
38+
import java.util.Arrays;
3539
import java.util.Collections;
3640
import java.util.List;
3741
import java.util.Set;
3842
import java.util.function.Function;
3943

44+
import static org.elasticsearch.index.codec.vectors.IVFVectorsFormat.MAX_VECTORS_PER_CLUSTER;
45+
import static org.elasticsearch.index.codec.vectors.IVFVectorsFormat.MIN_VECTORS_PER_CLUSTER;
4046
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.BBQ_MIN_DIMS;
4147
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.ElementType.BIT;
4248
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.ElementType.BYTE;
4349
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.ElementType.FLOAT;
50+
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.IVF_FORMAT;
4451
import static org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper.OVERSAMPLE_LIMIT;
4552
import static org.hamcrest.Matchers.containsString;
4653
import static org.hamcrest.Matchers.equalTo;
@@ -66,7 +73,7 @@ private DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsNonQuan
6673
}
6774

6875
public static DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsAll() {
69-
return randomFrom(
76+
List<DenseVectorFieldMapper.DenseVectorIndexOptions> options = new ArrayList<>(Arrays.asList(
7077
new DenseVectorFieldMapper.HnswIndexOptions(randomIntBetween(1, 100), randomIntBetween(1, 10_000)),
7178
new DenseVectorFieldMapper.Int8HnswIndexOptions(
7279
randomIntBetween(1, 100),
@@ -95,7 +102,18 @@ public static DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsA
95102
randomFrom((DenseVectorFieldMapper.RescoreVector) null, randomRescoreVector())
96103
),
97104
new DenseVectorFieldMapper.BBQFlatIndexOptions(randomFrom((DenseVectorFieldMapper.RescoreVector) null, randomRescoreVector()))
98-
);
105+
));
106+
107+
if(IVF_FORMAT.isEnabled()) {
108+
options.add(
109+
new DenseVectorFieldMapper.BBQIVFIndexOptions(
110+
randomIntBetween(MIN_VECTORS_PER_CLUSTER, MAX_VECTORS_PER_CLUSTER),
111+
randomFloatBetween(0.0f, 100.0f, true),
112+
randomFrom((DenseVectorFieldMapper.RescoreVector) null, randomRescoreVector()))
113+
);
114+
}
115+
116+
return randomFrom(options);
99117
}
100118

101119
private DenseVectorFieldMapper.DenseVectorIndexOptions randomIndexOptionsHnswQuantized() {
@@ -244,7 +262,9 @@ public void testCreateNestedKnnQuery() {
244262
if (field.getIndexOptions().isFlat()) {
245263
assertThat(query, instanceOf(DiversifyingParentBlockQuery.class));
246264
} else {
247-
assertTrue(query instanceof DiversifyingChildrenFloatKnnVectorQuery || query instanceof PatienceKnnVectorQuery);
265+
assertTrue(query instanceof DiversifyingChildrenFloatKnnVectorQuery
266+
|| query instanceof PatienceKnnVectorQuery
267+
|| query instanceof DiversifyingChildrenIVFKnnFloatVectorQuery);
248268
}
249269
}
250270
{
@@ -475,7 +495,9 @@ public void testCreateKnnQueryMaxDims() {
475495
if (fieldWith4096dims.getIndexOptions().isFlat()) {
476496
assertThat(query, instanceOf(DenseVectorQuery.Floats.class));
477497
} else {
478-
assertTrue(query instanceof KnnFloatVectorQuery || query instanceof PatienceKnnVectorQuery);
498+
assertTrue(query instanceof KnnFloatVectorQuery
499+
|| query instanceof PatienceKnnVectorQuery
500+
|| query instanceof IVFKnnFloatVectorQuery);
479501
}
480502
}
481503

@@ -792,7 +814,7 @@ private static void checkRescoreQueryParameters(
792814
DenseVectorFieldType fieldType,
793815
int k,
794816
int candidates,
795-
float visitPercentage,
817+
Float visitPercentage,
796818
float oversample,
797819
int expectedK,
798820
int expectedCandidates,

server/src/test/java/org/elasticsearch/search/retriever/KnnRetrieverBuilderParsingTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static KnnRetrieverBuilder createRandomKnnRetrieverBuilder() {
5252
float[] vector = randomVector(dim);
5353
int k = randomIntBetween(1, 100);
5454
int numCands = randomIntBetween(k + 20, 1000);
55-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
55+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
5656
Float similarity = randomBoolean() ? null : randomFloat();
5757
RescoreVectorBuilder rescoreVectorBuilder = randomBoolean()
5858
? null

server/src/test/java/org/elasticsearch/search/retriever/RankDocsRetrieverBuilderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private List<RetrieverBuilder> innerRetrievers(QueryRewriteContext queryRewriteC
7070
null,
7171
randomInt(10),
7272
randomIntBetween(10, 100),
73-
randomFloatBetween(0.0f, 100.0f, true),
73+
randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true),
7474
randomBoolean() ? null : new RescoreVectorBuilder(randomFloatBetween(1.0f, 10.0f, false)),
7575
randomFloat()
7676
);

server/src/test/java/org/elasticsearch/search/vectors/AbstractKnnVectorQueryBuilderTestCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ protected KnnVectorQueryBuilder doCreateTestQueryBuilder() {
146146
String fieldName = randomBoolean() ? VECTOR_FIELD : VECTOR_ALIAS_FIELD;
147147
int k = randomIntBetween(1, 100);
148148
int numCands = randomIntBetween(k + 20, 1000);
149-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
149+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
150150
KnnVectorQueryBuilder queryBuilder = createKnnVectorQueryBuilder(
151151
fieldName,
152152
k,

server/src/test/java/org/elasticsearch/search/vectors/KnnSearchBuilderTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static KnnSearchBuilder randomTestInstance() {
5252
float[] vector = randomVector(dim);
5353
int k = randomIntBetween(1, 100);
5454
int numCands = randomIntBetween(k + 20, 1000);
55-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
55+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
5656
RescoreVectorBuilder rescoreVectorBuilder = randomBoolean()
5757
? null
5858
: new RescoreVectorBuilder(randomFloatBetween(1.0f, 10.0f, false));
@@ -230,7 +230,7 @@ public void testToQueryBuilder() {
230230
float[] vector = randomVector(randomIntBetween(2, 30));
231231
int k = randomIntBetween(1, 100);
232232
int numCands = randomIntBetween(k, 1000);
233-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
233+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
234234
Float similarity = randomBoolean() ? null : randomFloat();
235235
RescoreVectorBuilder rescoreVectorBuilder = randomBoolean()
236236
? null

server/src/test/java/org/elasticsearch/search/vectors/KnnSearchRequestParserTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ private KnnSearch randomKnnSearch() {
277277

278278
int k = randomIntBetween(1, 100);
279279
int numCands = randomIntBetween(k, 1000);
280-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
280+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
281281
return new KnnSearch(field, vector, k, numCands, visitPercentage);
282282
}
283283

test/framework/src/main/java/org/elasticsearch/search/RandomSearchRequestGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public static SearchSourceBuilder randomSearchSourceBuilder(
266266
}
267267
int k = randomIntBetween(1, 100);
268268
int numCands = randomIntBetween(k, 1000);
269-
float visitPercentage = randomFloatBetween(0.0f, 100.0f, true);
269+
Float visitPercentage = randomBoolean() ? null : randomFloatBetween(0.0f, 100.0f, true);
270270
RescoreVectorBuilder rescoreVectorBuilder = randomBoolean()
271271
? null
272272
: new RescoreVectorBuilder(randomFloatBetween(1.0f, 10.0f, false));

0 commit comments

Comments
 (0)