@@ -3203,4 +3203,47 @@ TEST_F(SearchFamilyTest, AggregateWithLoadFromSortBySeveralFields) {
3203
3203
EXPECT_THAT (resp.GetVec (), ElementsAreArray (matchers));
3204
3204
}
3205
3205
3206
+ TEST_F (SearchFamilyTest, NumericFilter) {
3207
+ // Index name, age, height
3208
+ Run ({" FT.CREATE" , " i1" , " ON" , " HASH" , " SCHEMA" , " name" , " TEXT" , " age" , " NUMERIC" , " height" ,
3209
+ " NUMERIC" });
3210
+
3211
+ // Index name, age
3212
+ Run ({" FT.CREATE" , " i2" , " ON" , " HASH" , " SCHEMA" , " name" , " TEXT" , " age" , " NUMERIC" });
3213
+
3214
+ Run ({" HSET" , " id:1" , " name" , " John" , " age" , " 28" , " height" , " 184" });
3215
+ Run ({" HSET" , " id:2" , " name" , " Ivan" , " age" , " 30" , " height" , " 180" });
3216
+ Run ({" HSET" , " id:3" , " name" , " Jon" , " age" , " 25" , " height" , " 182" });
3217
+ Run ({" HSET" , " id:4" , " name" , " Juan" , " age" , " 32" , " height" , " 186" });
3218
+ Run ({" HSET" , " id:5" , " name" , " Ioan" , " age" , " 35" , " height" , " 181" });
3219
+
3220
+ // Filter with non-star query
3221
+ auto res = Run ({" FT.SEARCH" , " i1" , " I*" , " FILTER" , " age" , " 31" , " 40" });
3222
+ EXPECT_THAT (res, AreDocIds (" id:5" ));
3223
+
3224
+ // Filter on ONE NUMERIC index
3225
+ res = Run ({" FT.SEARCH" , " i1" , " *" , " FILTER" , " age" , " 25" , " 28" });
3226
+ EXPECT_THAT (res, AreDocIds (" id:1" , " id:3" ));
3227
+
3228
+ // Filter on TWO NUMERIC indexes
3229
+ res =
3230
+ Run ({" FT.SEARCH" , " i1" , " *" , " FILTER" , " age" , " 25" , " 28" , " FILTER" , " height" , " 180" , " 182" });
3231
+ EXPECT_THAT (res, AreDocIds (" id:3" ));
3232
+
3233
+ // Filter on TWO NUMERIC indexes where second filtering produce empty result
3234
+ res =
3235
+ Run ({" FT.SEARCH" , " i1" , " *" , " FILTER" , " age" , " 25" , " 28" , " FILTER" , " height" , " 200" , " 300" });
3236
+ EXPECT_THAT (res, AreDocIds ());
3237
+
3238
+ // Filter on index which doesn't exists
3239
+ res = Run ({" FT.SEARCH" , " i2" , " *" , " FILTER" , " height" , " 180" , " 190" });
3240
+ EXPECT_THAT (res, ErrArg (" Invalid field: height" ));
3241
+
3242
+ // Two filters on same field
3243
+ res = Run ({" FT.SEARCH" , " i1" , " J*" , " FILTER" , " age" , " 25" , " 30" , " FILTER" , " age" , " 28" , " 32" });
3244
+ EXPECT_THAT (res, AreDocIds (" id:1" ));
3245
+
3246
+ Run ({" FLUSHALL" });
3247
+ }
3248
+
3206
3249
} // namespace dfly
0 commit comments