@@ -341,6 +341,7 @@ async def test_client(decoded_r: redis.Redis):
341341
342342@pytest .mark .redismod
343343@pytest .mark .onlynoncluster
344+ @skip_if_server_version_gte ("7.9.0" )
344345async def test_scores (decoded_r : redis .Redis ):
345346 await decoded_r .ft ().create_index ((TextField ("txt" ),))
346347
@@ -361,6 +362,29 @@ async def test_scores(decoded_r: redis.Redis):
361362 assert "doc1" == res ["results" ][1 ]["id" ]
362363
363364
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+
364388@pytest .mark .redismod
365389async def test_stopwords (decoded_r : redis .Redis ):
366390 stopwords = ["foo" , "bar" , "baz" ]
@@ -663,7 +687,7 @@ async def test_summarize(decoded_r: redis.Redis):
663687 await createIndex (decoded_r .ft ())
664688 await waitForIndex (decoded_r , "idx" )
665689
666- q = Query ("king henry" ).paging (0 , 1 )
690+ q = Query (' "king henry"' ).paging (0 , 1 )
667691 q .highlight (fields = ("play" , "txt" ), tags = ("<b>" , "</b>" ))
668692 q .summarize ("txt" )
669693
@@ -675,7 +699,7 @@ async def test_summarize(decoded_r: redis.Redis):
675699 == doc .txt
676700 )
677701
678- q = Query ("king henry" ).paging (0 , 1 ).summarize ().highlight ()
702+ q = Query (' "king henry"' ).paging (0 , 1 ).summarize ().highlight ()
679703
680704 doc = sorted ((await decoded_r .ft ().search (q )).docs )[0 ]
681705 assert "<b>Henry</b> ... " == doc .play
@@ -691,7 +715,7 @@ async def test_summarize(decoded_r: redis.Redis):
691715 == doc ["extra_attributes" ]["txt" ]
692716 )
693717
694- q = Query ("king henry" ).paging (0 , 1 ).summarize ().highlight ()
718+ q = Query (' "king henry"' ).paging (0 , 1 ).summarize ().highlight ()
695719
696720 doc = sorted ((await decoded_r .ft ().search (q ))["results" ])[0 ]
697721 assert "<b>Henry</b> ... " == doc ["extra_attributes" ]["play" ]
@@ -1029,6 +1053,7 @@ async def test_phonetic_matcher(decoded_r: redis.Redis):
10291053@pytest .mark .onlynoncluster
10301054# NOTE(imalinovskyi): This test contains hardcoded scores valid only for RediSearch 2.8+
10311055@skip_ifmodversion_lt ("2.8.0" , "search" )
1056+ @skip_if_server_version_gte ("7.9.0" )
10321057async def test_scorer (decoded_r : redis .Redis ):
10331058 await decoded_r .ft ().create_index ((TextField ("description" ),))
10341059
@@ -1087,6 +1112,69 @@ async def test_scorer(decoded_r: redis.Redis):
10871112 assert 0.0 == res ["results" ][0 ]["score" ]
10881113
10891114
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+
10901178@pytest .mark .redismod
10911179async def test_get (decoded_r : redis .Redis ):
10921180 await decoded_r .ft ().create_index ((TextField ("f1" ), TextField ("f2" )))
0 commit comments