@@ -1043,6 +1043,96 @@ var _ = Describe("RediSearch commands", Label("search"), func() {
1043
1043
Expect (err ).NotTo (HaveOccurred ())
1044
1044
Expect (res2 .Total ).To (BeEquivalentTo (int64 (2 )))
1045
1045
})
1046
+
1047
+ It ("should search missing fields" , Label ("search" , "ftcreate" , "ftsearch" , "NonRedisEnterprise" ), func () {
1048
+ val , err := client .FTCreate (ctx , "idx1" , & redis.FTCreateOptions {Prefix : []interface {}{"property:" }},
1049
+ & redis.FieldSchema {FieldName : "title" , FieldType : redis .SearchFieldTypeText , Sortable : true },
1050
+ & redis.FieldSchema {FieldName : "features" , FieldType : redis .SearchFieldTypeTag , IndexMissing : true },
1051
+ & redis.FieldSchema {FieldName : "description" , FieldType : redis .SearchFieldTypeText , IndexMissing : true }).Result ()
1052
+ Expect (err ).NotTo (HaveOccurred ())
1053
+ Expect (val ).To (BeEquivalentTo ("OK" ))
1054
+ WaitForIndexing (client , "idx1" )
1055
+
1056
+ client .HSet (ctx , "property:1" , map [string ]interface {}{
1057
+ "title" : "Luxury Villa in Malibu" ,
1058
+ "features" : "pool,sea view,modern" ,
1059
+ "description" : "A stunning modern villa overlooking the Pacific Ocean." ,
1060
+ })
1061
+
1062
+ client .HSet (ctx , "property:2" , map [string ]interface {}{
1063
+ "title" : "Downtown Flat" ,
1064
+ "description" : "Modern flat in central Paris with easy access to metro." ,
1065
+ })
1066
+
1067
+ client .HSet (ctx , "property:3" , map [string ]interface {}{
1068
+ "title" : "Beachfront Bungalow" ,
1069
+ "features" : "beachfront,sun deck" ,
1070
+ })
1071
+
1072
+ res , err := client .FTSearchWithArgs (ctx , "idx1" , "ismissing(@features)" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1073
+ Expect (err ).NotTo (HaveOccurred ())
1074
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:2" ))
1075
+
1076
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "-ismissing(@features)" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1077
+ Expect (err ).NotTo (HaveOccurred ())
1078
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:1" ))
1079
+ Expect (res .Docs [1 ].ID ).To (BeEquivalentTo ("property:3" ))
1080
+
1081
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "ismissing(@description)" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1082
+ Expect (err ).NotTo (HaveOccurred ())
1083
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:3" ))
1084
+
1085
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "-ismissing(@description)" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1086
+ Expect (err ).NotTo (HaveOccurred ())
1087
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:1" ))
1088
+ Expect (res .Docs [1 ].ID ).To (BeEquivalentTo ("property:2" ))
1089
+ })
1090
+
1091
+ It ("should search empty fields" , Label ("search" , "ftcreate" , "ftsearch" , "NonRedisEnterprise" ), func () {
1092
+ val , err := client .FTCreate (ctx , "idx1" , & redis.FTCreateOptions {Prefix : []interface {}{"property:" }},
1093
+ & redis.FieldSchema {FieldName : "title" , FieldType : redis .SearchFieldTypeText , Sortable : true },
1094
+ & redis.FieldSchema {FieldName : "features" , FieldType : redis .SearchFieldTypeTag , IndexEmpty : true },
1095
+ & redis.FieldSchema {FieldName : "description" , FieldType : redis .SearchFieldTypeText , IndexEmpty : true }).Result ()
1096
+ Expect (err ).NotTo (HaveOccurred ())
1097
+ Expect (val ).To (BeEquivalentTo ("OK" ))
1098
+ WaitForIndexing (client , "idx1" )
1099
+
1100
+ client .HSet (ctx , "property:1" , map [string ]interface {}{
1101
+ "title" : "Luxury Villa in Malibu" ,
1102
+ "features" : "pool,sea view,modern" ,
1103
+ "description" : "A stunning modern villa overlooking the Pacific Ocean." ,
1104
+ })
1105
+
1106
+ client .HSet (ctx , "property:2" , map [string ]interface {}{
1107
+ "title" : "Downtown Flat" ,
1108
+ "features" : "" ,
1109
+ "description" : "Modern flat in central Paris with easy access to metro." ,
1110
+ })
1111
+
1112
+ client .HSet (ctx , "property:3" , map [string ]interface {}{
1113
+ "title" : "Beachfront Bungalow" ,
1114
+ "features" : "beachfront,sun deck" ,
1115
+ "description" : "" ,
1116
+ })
1117
+
1118
+ res , err := client .FTSearchWithArgs (ctx , "idx1" , "@features:{\" \" }" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1119
+ Expect (err ).NotTo (HaveOccurred ())
1120
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:2" ))
1121
+
1122
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "-@features:{\" \" }" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1123
+ Expect (err ).NotTo (HaveOccurred ())
1124
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:1" ))
1125
+ Expect (res .Docs [1 ].ID ).To (BeEquivalentTo ("property:3" ))
1126
+
1127
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "@description:''" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1128
+ Expect (err ).NotTo (HaveOccurred ())
1129
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:3" ))
1130
+
1131
+ res , err = client .FTSearchWithArgs (ctx , "idx1" , "-@description:''" , & redis.FTSearchOptions {DialectVersion : 4 , Return : []redis.FTSearchReturn {{FieldName : "id" }}, NoContent : true }).Result ()
1132
+ Expect (err ).NotTo (HaveOccurred ())
1133
+ Expect (res .Docs [0 ].ID ).To (BeEquivalentTo ("property:1" ))
1134
+ Expect (res .Docs [1 ].ID ).To (BeEquivalentTo ("property:2" ))
1135
+ })
1046
1136
})
1047
1137
1048
1138
// It("should FTProfile Search and Aggregate", Label("search", "ftprofile"), func() {
0 commit comments