@@ -293,6 +293,80 @@ public void testUsesIndexForLimitQueryWhenIndexIsUpdated() {
293
293
assertQueryReturned ("coll/a" , "coll/c" );
294
294
}
295
295
296
+ @ Test
297
+ public void testIndexesVectorValues () {
298
+ FieldIndex index =
299
+ fieldIndex (
300
+ "coll" , 0 , FieldIndex .INITIAL_STATE , "embedding" , FieldIndex .Segment .Kind .ASCENDING );
301
+ configureFieldIndexes (singletonList (index ));
302
+
303
+ writeMutation (setMutation ("coll/arr1" , map ("embedding" , Arrays .asList (0.1 , 0.2 , 0.3 ))));
304
+ writeMutation (setMutation ("coll/map2" , map ("embedding" , map ())));
305
+ writeMutation (
306
+ setMutation ("coll/doc3" , map ("embedding" , FieldValue .vector (new double [] {4 , 5 , 6 }))));
307
+ writeMutation (setMutation ("coll/doc4" , map ("embedding" , FieldValue .vector (new double [] {5 }))));
308
+
309
+ Query query = query ("coll" ).orderBy (orderBy ("embedding" , "asc" ));
310
+ executeQuery (query );
311
+ assertQueryReturned ("coll/arr1" , "coll/doc4" , "coll/doc3" , "coll/map2" );
312
+
313
+ query =
314
+ query ("coll" ).filter (filter ("embedding" , "==" , FieldValue .vector (new double [] {4 , 5 , 6 })));
315
+ executeQuery (query );
316
+ assertQueryReturned ("coll/doc3" );
317
+
318
+ query =
319
+ query ("coll" ).filter (filter ("embedding" , ">" , FieldValue .vector (new double [] {4 , 5 , 6 })));
320
+ executeQuery (query );
321
+ assertQueryReturned ();
322
+
323
+ query = query ("coll" ).filter (filter ("embedding" , ">=" , FieldValue .vector (new double [] {4 })));
324
+ executeQuery (query );
325
+ assertQueryReturned ("coll/doc4" , "coll/doc3" );
326
+
327
+ backfillIndexes ();
328
+
329
+ query = query ("coll" ).orderBy (orderBy ("embedding" , "asc" ));
330
+ executeQuery (query );
331
+ assertOverlaysRead (/* byKey= */ 4 , /* byCollection= */ 0 );
332
+ assertOverlayTypes (
333
+ keyMap (
334
+ "coll/arr1" ,
335
+ CountingQueryEngine .OverlayType .Set ,
336
+ "coll/map2" ,
337
+ CountingQueryEngine .OverlayType .Set ,
338
+ "coll/doc3" ,
339
+ CountingQueryEngine .OverlayType .Set ,
340
+ "coll/doc4" ,
341
+ CountingQueryEngine .OverlayType .Set ));
342
+ assertQueryReturned ("coll/arr1" , "coll/doc4" , "coll/doc3" , "coll/map2" );
343
+
344
+ query =
345
+ query ("coll" ).filter (filter ("embedding" , "==" , FieldValue .vector (new double [] {4 , 5 , 6 })));
346
+ executeQuery (query );
347
+ assertOverlaysRead (/* byKey= */ 1 , /* byCollection= */ 0 );
348
+ assertOverlayTypes (keyMap ("coll/doc3" , CountingQueryEngine .OverlayType .Set ));
349
+ assertQueryReturned ("coll/doc3" );
350
+
351
+ query =
352
+ query ("coll" ).filter (filter ("embedding" , ">" , FieldValue .vector (new double [] {4 , 5 , 6 })));
353
+ executeQuery (query );
354
+ assertOverlaysRead (/* byKey= */ 0 , /* byCollection= */ 0 );
355
+ assertOverlayTypes (keyMap ());
356
+ assertQueryReturned ();
357
+
358
+ query = query ("coll" ).filter (filter ("embedding" , ">=" , FieldValue .vector (new double [] {4 })));
359
+ executeQuery (query );
360
+ assertOverlaysRead (/* byKey= */ 2 , /* byCollection= */ 0 );
361
+ assertOverlayTypes (
362
+ keyMap (
363
+ "coll/doc4" ,
364
+ CountingQueryEngine .OverlayType .Set ,
365
+ "coll/doc3" ,
366
+ CountingQueryEngine .OverlayType .Set ));
367
+ assertQueryReturned ("coll/doc4" , "coll/doc3" );
368
+ }
369
+
296
370
@ Test
297
371
public void testIndexesServerTimestamps () {
298
372
FieldIndex index =
0 commit comments