@@ -341,6 +341,7 @@ async def test_client(decoded_r: redis.Redis):
341
341
342
342
@pytest .mark .redismod
343
343
@pytest .mark .onlynoncluster
344
+ @skip_if_server_version_gte ("7.9.0" )
344
345
async def test_scores (decoded_r : redis .Redis ):
345
346
await decoded_r .ft ().create_index ((TextField ("txt" ),))
346
347
@@ -361,6 +362,29 @@ async def test_scores(decoded_r: redis.Redis):
361
362
assert "doc1" == res ["results" ][1 ]["id" ]
362
363
363
364
365
+ @pytest .mark .redismod
366
+ @pytest .mark .onlynoncluster
367
+ @skip_if_server_version_lt ("7.9.0" )
368
+ async def test_scores_with_new_default_scorer (decoded_r : redis .Redis ):
369
+ await decoded_r .ft ().create_index ((TextField ("txt" ),))
370
+
371
+ await decoded_r .hset ("doc1" , mapping = {"txt" : "foo baz" })
372
+ await decoded_r .hset ("doc2" , mapping = {"txt" : "foo bar" })
373
+
374
+ q = Query ("foo ~bar" ).with_scores ()
375
+ res = await decoded_r .ft ().search (q )
376
+ if is_resp2_connection (decoded_r ):
377
+ assert 2 == res .total
378
+ assert "doc2" == res .docs [0 ].id
379
+ assert 0.87 == pytest .approx (res .docs [0 ].score , 0.01 )
380
+ assert "doc1" == res .docs [1 ].id
381
+ else :
382
+ assert 2 == res ["total_results" ]
383
+ assert "doc2" == res ["results" ][0 ]["id" ]
384
+ assert 0.87 == pytest .approx (res ["results" ][0 ]["score" ], 0.01 )
385
+ assert "doc1" == res ["results" ][1 ]["id" ]
386
+
387
+
364
388
@pytest .mark .redismod
365
389
async def test_stopwords (decoded_r : redis .Redis ):
366
390
stopwords = ["foo" , "bar" , "baz" ]
@@ -1029,6 +1053,7 @@ async def test_phonetic_matcher(decoded_r: redis.Redis):
1029
1053
@pytest .mark .onlynoncluster
1030
1054
# NOTE(imalinovskyi): This test contains hardcoded scores valid only for RediSearch 2.8+
1031
1055
@skip_ifmodversion_lt ("2.8.0" , "search" )
1056
+ @skip_if_server_version_gte ("7.9.0" )
1032
1057
async def test_scorer (decoded_r : redis .Redis ):
1033
1058
await decoded_r .ft ().create_index ((TextField ("description" ),))
1034
1059
@@ -1087,6 +1112,69 @@ async def test_scorer(decoded_r: redis.Redis):
1087
1112
assert 0.0 == res ["results" ][0 ]["score" ]
1088
1113
1089
1114
1115
+ @pytest .mark .redismod
1116
+ @pytest .mark .onlynoncluster
1117
+ # NOTE(imalinovskyi): This test contains hardcoded scores valid only for RediSearch 2.8+
1118
+ @skip_ifmodversion_lt ("2.8.0" , "search" )
1119
+ @skip_if_server_version_lt ("7.9.0" )
1120
+ async def test_scorer_with_new_default_scorer (decoded_r : redis .Redis ):
1121
+ await decoded_r .ft ().create_index ((TextField ("description" ),))
1122
+
1123
+ await decoded_r .hset (
1124
+ "doc1" , mapping = {"description" : "The quick brown fox jumps over the lazy dog" }
1125
+ )
1126
+ await decoded_r .hset (
1127
+ "doc2" ,
1128
+ mapping = {
1129
+ "description" : "Quick alice was beginning to get very tired of sitting by her quick sister on the bank, and of having nothing to do." # noqa
1130
+ },
1131
+ )
1132
+
1133
+ if is_resp2_connection (decoded_r ):
1134
+ # default scorer is BM25STD
1135
+ res = await decoded_r .ft ().search (Query ("quick" ).with_scores ())
1136
+ assert 0.23 == pytest .approx (res .docs [0 ].score , 0.05 )
1137
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("TFIDF" ).with_scores ())
1138
+ assert 1.0 == res .docs [0 ].score
1139
+ res = await decoded_r .ft ().search (
1140
+ Query ("quick" ).scorer ("TFIDF.DOCNORM" ).with_scores ()
1141
+ )
1142
+ assert 0.14285714285714285 == res .docs [0 ].score
1143
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("BM25" ).with_scores ())
1144
+ assert 0.22471909420069797 == res .docs [0 ].score
1145
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("DISMAX" ).with_scores ())
1146
+ assert 2.0 == res .docs [0 ].score
1147
+ res = await decoded_r .ft ().search (
1148
+ Query ("quick" ).scorer ("DOCSCORE" ).with_scores ()
1149
+ )
1150
+ assert 1.0 == res .docs [0 ].score
1151
+ res = await decoded_r .ft ().search (
1152
+ Query ("quick" ).scorer ("HAMMING" ).with_scores ()
1153
+ )
1154
+ assert 0.0 == res .docs [0 ].score
1155
+ else :
1156
+ res = await decoded_r .ft ().search (Query ("quick" ).with_scores ())
1157
+ assert 0.23 == pytest .approx (res ["results" ][0 ]["score" ], 0.05 )
1158
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("TFIDF" ).with_scores ())
1159
+ assert 1.0 == res ["results" ][0 ]["score" ]
1160
+ res = await decoded_r .ft ().search (
1161
+ Query ("quick" ).scorer ("TFIDF.DOCNORM" ).with_scores ()
1162
+ )
1163
+ assert 0.14285714285714285 == res ["results" ][0 ]["score" ]
1164
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("BM25" ).with_scores ())
1165
+ assert 0.22471909420069797 == res ["results" ][0 ]["score" ]
1166
+ res = await decoded_r .ft ().search (Query ("quick" ).scorer ("DISMAX" ).with_scores ())
1167
+ assert 2.0 == res ["results" ][0 ]["score" ]
1168
+ res = await decoded_r .ft ().search (
1169
+ Query ("quick" ).scorer ("DOCSCORE" ).with_scores ()
1170
+ )
1171
+ assert 1.0 == res ["results" ][0 ]["score" ]
1172
+ res = await decoded_r .ft ().search (
1173
+ Query ("quick" ).scorer ("HAMMING" ).with_scores ()
1174
+ )
1175
+ assert 0.0 == res ["results" ][0 ]["score" ]
1176
+
1177
+
1090
1178
@pytest .mark .redismod
1091
1179
async def test_get (decoded_r : redis .Redis ):
1092
1180
await decoded_r .ft ().create_index ((TextField ("f1" ), TextField ("f2" )))
0 commit comments