22using NRedisStack . Search ;
33using NRedisStack . RedisStackCommands ;
44using Xunit ;
5- using NRedisStack . Search . Literals ;
65using NetTopologySuite . Geometries ;
76
87namespace NRedisStack . Tests . Search ;
@@ -123,4 +122,45 @@ public void TestEmptyFields()
123122 Assert . Equal ( "hashWithEmptyFields" , result . Documents [ 0 ] . Id ) ;
124123
125124 }
126- }
125+
126+ [ SkipIfRedis ( Is . OSSCluster , Comparison . LessThan , "7.3.240" ) ]
127+ public void TestCreateFloat16VectorField ( )
128+ {
129+ IDatabase db = redisFixture . Redis . GetDatabase ( ) ;
130+ db . Execute ( "FLUSHALL" ) ;
131+ var ft = db . FT ( 2 ) ;
132+ var schema = new Schema ( ) . AddVectorField ( "v" , Schema . VectorField . VectorAlgo . FLAT , new Dictionary < string , object > ( )
133+ {
134+ [ "TYPE" ] = "FLOAT16" ,
135+ [ "DIM" ] = "5" ,
136+ [ "DISTANCE_METRIC" ] = "L2" ,
137+ } ) . AddVectorField ( "v2" , Schema . VectorField . VectorAlgo . FLAT , new Dictionary < string , object > ( )
138+ {
139+ [ "TYPE" ] = "BFLOAT16" ,
140+ [ "DIM" ] = "4" ,
141+ [ "DISTANCE_METRIC" ] = "L2" ,
142+ } ) ;
143+ Assert . True ( ft . Create ( "idx" , new FTCreateParams ( ) , schema ) ) ;
144+
145+ short [ ] vec1 = new short [ ] { 2 , 1 , 2 , 2 , 2 } ;
146+ byte [ ] vec1ToBytes = new byte [ vec1 . Length * sizeof ( short ) ] ;
147+ Buffer . BlockCopy ( vec1 , 0 , vec1ToBytes , 0 , vec1ToBytes . Length ) ;
148+
149+ short [ ] vec2 = new short [ ] { 1 , 2 , 2 , 2 } ;
150+ byte [ ] vec2ToBytes = new byte [ vec2 . Length * sizeof ( short ) ] ;
151+ Buffer . BlockCopy ( vec2 , 0 , vec2ToBytes , 0 , vec2ToBytes . Length ) ;
152+
153+ var entries = new HashEntry [ ] { new HashEntry ( "v" , vec1ToBytes ) , new HashEntry ( "v2" , vec2ToBytes ) } ;
154+ db . HashSet ( "a" , entries ) ;
155+ db . HashSet ( "b" , entries ) ;
156+ db . HashSet ( "c" , entries ) ;
157+
158+ var q = new Query ( "*=>[KNN 2 @v $vec]" ) . ReturnFields ( "__v_score" ) ;
159+ var res = ft . Search ( "idx" , q . AddParam ( "vec" , vec1ToBytes ) ) ;
160+ Assert . Equal ( 2 , res . TotalResults ) ;
161+
162+ q = new Query ( "*=>[KNN 2 @v2 $vec]" ) . ReturnFields ( "__v_score" ) ;
163+ res = ft . Search ( "idx" , q . AddParam ( "vec" , vec2ToBytes ) ) ;
164+ Assert . Equal ( 2 , res . TotalResults ) ;
165+ }
166+ }
0 commit comments