Skip to content

Commit d1cea54

Browse files
committed
Update list concatenation to use extend. Fix spelling error in tests.Extend a test to use two reducers.
1 parent e12304e commit d1cea54

File tree

3 files changed

+147
-126
lines changed

3 files changed

+147
-126
lines changed

redis/commands/search/hybrid_query.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ def group_by(self, fields: List[str], *reducers: Reducer) -> Self:
235235

236236
ret = ["GROUPBY", str(len(fields)), *fields]
237237
for reducer in reducers:
238-
ret += ["REDUCE", reducer.NAME, str(len(reducer.args))]
238+
ret.extend(("REDUCE", reducer.NAME, str(len(reducer.args))))
239239
ret.extend(reducer.args)
240240
if reducer._alias is not None:
241-
ret += ["AS", reducer._alias]
241+
ret.extend(("AS", reducer._alias))
242242

243243
self._groupby.extend(ret)
244244
return self
@@ -255,7 +255,7 @@ def apply(self, **kwexpr) -> Self:
255255
for alias, expr in kwexpr.items():
256256
ret = ["APPLY", expr]
257257
if alias is not None:
258-
ret += ["AS", alias]
258+
ret.extend(("AS", alias))
259259
self._apply.extend(ret)
260260

261261
return self

tests/test_asyncio/test_search.py

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -2344,16 +2344,16 @@ async def test_hybrid_search_query_with_scorer(self, decoded_r):
23442344
CombinationMethods.LINEAR, ALPHA=1, BETA=0
23452345
)
23462346

2347-
posprocessing_config = HybridPostProcessingConfig()
2348-
posprocessing_config.load(
2347+
postprocessing_config = HybridPostProcessingConfig()
2348+
postprocessing_config.load(
23492349
"@description", "@color", "@price", "@size", "@__score", "@__item"
23502350
)
2351-
posprocessing_config.limit(0, 2)
2351+
postprocessing_config.limit(0, 2)
23522352

23532353
res = await decoded_r.ft().hybrid_search(
23542354
query=hybrid_query,
23552355
combine_method=combine_method,
2356-
post_processing=posprocessing_config,
2356+
post_processing=postprocessing_config,
23572357
timeout=10,
23582358
)
23592359

@@ -2391,7 +2391,7 @@ async def test_hybrid_search_query_with_scorer(self, decoded_r):
23912391
res = await decoded_r.ft().hybrid_search(
23922392
query=hybrid_query,
23932393
combine_method=combine_method,
2394-
post_processing=posprocessing_config,
2394+
post_processing=postprocessing_config,
23952395
timeout=10,
23962396
)
23972397
expected_results_bm25 = [
@@ -2442,11 +2442,11 @@ async def test_hybrid_search_query_with_vsim_filter(self, decoded_r):
24422442

24432443
hybrid_query = HybridQuery(search_query, vsim_query)
24442444

2445-
posprocessing_config = HybridPostProcessingConfig()
2446-
posprocessing_config.load("@price", "@size")
2445+
postprocessing_config = HybridPostProcessingConfig()
2446+
postprocessing_config.load("@price", "@size")
24472447

24482448
res = await decoded_r.ft().hybrid_search(
2449-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
2449+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
24502450
)
24512451
if is_resp2_connection(decoded_r):
24522452
assert len(res.results) > 0
@@ -2481,10 +2481,10 @@ async def test_hybrid_search_query_with_vsim_knn(self, decoded_r):
24812481

24822482
hybrid_query = HybridQuery(search_query, vsim_query)
24832483

2484-
posprocessing_config = HybridPostProcessingConfig()
2484+
postprocessing_config = HybridPostProcessingConfig()
24852485

24862486
res = await decoded_r.ft().hybrid_search(
2487-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
2487+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
24882488
)
24892489
expected_results = [
24902490
{"__key": b"item:2", "__score": b"0.016393442623"},
@@ -2557,11 +2557,11 @@ async def test_hybrid_search_query_with_vsim_range(self, decoded_r):
25572557

25582558
hybrid_query = HybridQuery(search_query, vsim_query)
25592559

2560-
posprocessing_config = HybridPostProcessingConfig()
2561-
posprocessing_config.limit(0, 3)
2560+
postprocessing_config = HybridPostProcessingConfig()
2561+
postprocessing_config.limit(0, 3)
25622562

25632563
res = await decoded_r.ft().hybrid_search(
2564-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
2564+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
25652565
)
25662566

25672567
expected_results = [
@@ -2595,7 +2595,7 @@ async def test_hybrid_search_query_with_vsim_range(self, decoded_r):
25952595

25962596
res = await decoded_r.ft().hybrid_search(
25972597
query=hybrid_query_with_hnsw,
2598-
post_processing=posprocessing_config,
2598+
post_processing=postprocessing_config,
25992599
timeout=10,
26002600
)
26012601

@@ -2707,13 +2707,13 @@ async def test_hybrid_search_query_with_combine(self, decoded_r):
27072707
CombinationMethods.LINEAR, ALPHA=0.5, BETA=0.5
27082708
)
27092709

2710-
posprocessing_config = HybridPostProcessingConfig()
2711-
posprocessing_config.limit(0, 3)
2710+
postprocessing_config = HybridPostProcessingConfig()
2711+
postprocessing_config.limit(0, 3)
27122712

27132713
res = await decoded_r.ft().hybrid_search(
27142714
query=hybrid_query,
27152715
combine_method=combine_method_linear,
2716-
post_processing=posprocessing_config,
2716+
post_processing=postprocessing_config,
27172717
timeout=10,
27182718
)
27192719

@@ -2742,7 +2742,7 @@ async def test_hybrid_search_query_with_combine(self, decoded_r):
27422742
res = await decoded_r.ft().hybrid_search(
27432743
query=hybrid_query,
27442744
combine_method=combine_method_rrf,
2745-
post_processing=posprocessing_config,
2745+
post_processing=postprocessing_config,
27462746
timeout=10,
27472747
)
27482748

@@ -2769,7 +2769,7 @@ async def test_hybrid_search_query_with_combine(self, decoded_r):
27692769
res = await decoded_r.ft().hybrid_search(
27702770
query=hybrid_query,
27712771
combine_method=combine_method_rrf_2,
2772-
post_processing=posprocessing_config,
2772+
post_processing=postprocessing_config,
27732773
timeout=10,
27742774
)
27752775

@@ -2812,16 +2812,16 @@ async def test_hybrid_search_query_with_load(self, decoded_r):
28122812
CombinationMethods.LINEAR, ALPHA=0.5, BETA=0.5
28132813
)
28142814

2815-
posprocessing_config = HybridPostProcessingConfig()
2816-
posprocessing_config.load(
2815+
postprocessing_config = HybridPostProcessingConfig()
2816+
postprocessing_config.load(
28172817
"@description", "@color", "@price", "@size", "@__key AS item_key"
28182818
)
2819-
posprocessing_config.limit(0, 1)
2819+
postprocessing_config.limit(0, 1)
28202820

28212821
res = await decoded_r.ft().hybrid_search(
28222822
query=hybrid_query,
28232823
combine_method=combine_method,
2824-
post_processing=posprocessing_config,
2824+
post_processing=postprocessing_config,
28252825
timeout=10,
28262826
)
28272827

@@ -2866,16 +2866,16 @@ async def test_hybrid_search_query_with_load_and_apply(self, decoded_r):
28662866

28672867
hybrid_query = HybridQuery(search_query, vsim_query)
28682868

2869-
posprocessing_config = HybridPostProcessingConfig()
2870-
posprocessing_config.load("@color", "@price", "@size")
2871-
posprocessing_config.apply(
2869+
postprocessing_config = HybridPostProcessingConfig()
2870+
postprocessing_config.load("@color", "@price", "@size")
2871+
postprocessing_config.apply(
28722872
price_discount="@price - (@price * 0.1)",
28732873
tax_discount="@price_discount * 0.2",
28742874
)
2875-
posprocessing_config.limit(0, 3)
2875+
postprocessing_config.limit(0, 3)
28762876

28772877
res = await decoded_r.ft().hybrid_search(
2878-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
2878+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
28792879
)
28802880

28812881
expected_results = [
@@ -2931,16 +2931,16 @@ async def test_hybrid_search_query_with_load_and_filter(self, decoded_r):
29312931

29322932
hybrid_query = HybridQuery(search_query, vsim_query)
29332933

2934-
posprocessing_config = HybridPostProcessingConfig()
2935-
posprocessing_config.load("@description", "@color", "@price", "@size")
2934+
postprocessing_config = HybridPostProcessingConfig()
2935+
postprocessing_config.load("@description", "@color", "@price", "@size")
29362936
# for the postprocessing filter we need to filter on the loaded fields
29372937
# expecting all of them to be interpreted as strings - the initial filed types
29382938
# are not preserved
2939-
posprocessing_config.filter(HybridFilter('@price=="15"'))
2940-
posprocessing_config.limit(0, 3)
2939+
postprocessing_config.filter(HybridFilter('@price=="15"'))
2940+
postprocessing_config.limit(0, 3)
29412941

29422942
res = await decoded_r.ft().hybrid_search(
2943-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
2943+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
29442944
)
29452945

29462946
if is_resp2_connection(decoded_r):
@@ -2975,10 +2975,10 @@ async def test_hybrid_search_query_with_load_apply_and_params(self, decoded_r):
29752975

29762976
hybrid_query = HybridQuery(search_query, vsim_query)
29772977

2978-
posprocessing_config = HybridPostProcessingConfig()
2979-
posprocessing_config.load("@description", "@color", "@price")
2980-
posprocessing_config.apply(price_discount="@price - (@price * 0.1)")
2981-
posprocessing_config.limit(0, 3)
2978+
postprocessing_config = HybridPostProcessingConfig()
2979+
postprocessing_config.load("@description", "@color", "@price")
2980+
postprocessing_config.apply(price_discount="@price - (@price * 0.1)")
2981+
postprocessing_config.limit(0, 3)
29822982

29832983
params_substitution = {
29842984
"vector": "abcd1234abcd5678",
@@ -2987,7 +2987,7 @@ async def test_hybrid_search_query_with_load_apply_and_params(self, decoded_r):
29872987

29882988
res = await decoded_r.ft().hybrid_search(
29892989
query=hybrid_query,
2990-
post_processing=posprocessing_config,
2990+
post_processing=postprocessing_config,
29912991
params_substitution=params_substitution,
29922992
timeout=10,
29932993
)
@@ -3040,11 +3040,11 @@ async def test_hybrid_search_query_with_limit(self, decoded_r):
30403040

30413041
hybrid_query = HybridQuery(search_query, vsim_query)
30423042

3043-
posprocessing_config = HybridPostProcessingConfig()
3044-
posprocessing_config.limit(0, 3)
3043+
postprocessing_config = HybridPostProcessingConfig()
3044+
postprocessing_config.limit(0, 3)
30453045

30463046
res = await decoded_r.ft().hybrid_search(
3047-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
3047+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
30483048
)
30493049

30503050
if is_resp2_connection(decoded_r):
@@ -3071,16 +3071,16 @@ async def test_hybrid_search_query_with_load_apply_and_sortby(self, decoded_r):
30713071

30723072
hybrid_query = HybridQuery(search_query, vsim_query)
30733073

3074-
posprocessing_config = HybridPostProcessingConfig()
3075-
posprocessing_config.load("@color", "@price")
3076-
posprocessing_config.apply(price_discount="@price - (@price * 0.1)")
3077-
posprocessing_config.sort_by(
3074+
postprocessing_config = HybridPostProcessingConfig()
3075+
postprocessing_config.load("@color", "@price")
3076+
postprocessing_config.apply(price_discount="@price - (@price * 0.1)")
3077+
postprocessing_config.sort_by(
30783078
SortbyField("@price_discount", asc=False), SortbyField("@color", asc=True)
30793079
)
3080-
posprocessing_config.limit(0, 5)
3080+
postprocessing_config.limit(0, 5)
30813081

30823082
res = await decoded_r.ft().hybrid_search(
3083-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
3083+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
30843084
)
30853085

30863086
expected_results = [
@@ -3181,19 +3181,19 @@ async def test_hybrid_search_query_with_load_and_groupby(self, decoded_r):
31813181

31823182
hybrid_query = HybridQuery(search_query, vsim_query)
31833183

3184-
posprocessing_config = HybridPostProcessingConfig()
3185-
posprocessing_config.load("@color", "@price", "@size", "@item_type")
3186-
posprocessing_config.limit(0, 4)
3184+
postprocessing_config = HybridPostProcessingConfig()
3185+
postprocessing_config.load("@color", "@price", "@size", "@item_type")
3186+
postprocessing_config.limit(0, 4)
31873187

3188-
posprocessing_config.group_by(
3188+
postprocessing_config.group_by(
31893189
["@price"],
31903190
reducers.count_distinct("@color").alias("colors_count"),
31913191
)
31923192

3193-
posprocessing_config.sort_by(SortbyField("@price", asc=True))
3193+
postprocessing_config.sort_by(SortbyField("@price", asc=True))
31943194

31953195
res = await decoded_r.ft().hybrid_search(
3196-
query=hybrid_query, post_processing=posprocessing_config, timeout=10
3196+
query=hybrid_query, post_processing=postprocessing_config, timeout=10
31973197
)
31983198

31993199
expected_results = [
@@ -3212,21 +3212,21 @@ async def test_hybrid_search_query_with_load_and_groupby(self, decoded_r):
32123212
assert res["results"] == self._convert_dict_values_to_str(expected_results)
32133213
assert res["warnings"] == []
32143214

3215-
posprocessing_config = HybridPostProcessingConfig()
3216-
posprocessing_config.load("@color", "@price", "@size", "@item_type")
3217-
posprocessing_config.limit(0, 6)
3218-
posprocessing_config.sort_by(
3215+
postprocessing_config = HybridPostProcessingConfig()
3216+
postprocessing_config.load("@color", "@price", "@size", "@item_type")
3217+
postprocessing_config.limit(0, 6)
3218+
postprocessing_config.sort_by(
32193219
SortbyField("@price", asc=True),
32203220
SortbyField("@item_type", asc=True),
32213221
)
32223222

3223-
posprocessing_config.group_by(
3223+
postprocessing_config.group_by(
32243224
["@price", "@item_type"],
32253225
reducers.count_distinct("@color").alias("unique_colors_count"),
32263226
)
32273227

32283228
res = await decoded_r.ft().hybrid_search(
3229-
query=hybrid_query, post_processing=posprocessing_config, timeout=1000
3229+
query=hybrid_query, post_processing=postprocessing_config, timeout=1000
32303230
)
32313231

32323232
expected_results = [

0 commit comments

Comments
 (0)