2
2
using NRedisStack . Search ;
3
3
using NRedisStack . RedisStackCommands ;
4
4
using Xunit ;
5
- using NRedisStack . Search . Literals ;
6
5
using NetTopologySuite . Geometries ;
7
6
8
7
namespace NRedisStack . Tests . Search ;
@@ -123,4 +122,45 @@ public void TestEmptyFields()
123
122
Assert . Equal ( "hashWithEmptyFields" , result . Documents [ 0 ] . Id ) ;
124
123
125
124
}
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