Skip to content

Commit 8ce70a4

Browse files
authored
Merge pull request #1023 from sanders41/meilisearch-v1.10.0
Update for Meilisearch v1.10.0
2 parents 0bc33a5 + 0f2b5ab commit 8ce70a4

File tree

11 files changed

+743
-72
lines changed

11 files changed

+743
-72
lines changed

meilisearch_python_sdk/_client.py

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@
2222
)
2323
from meilisearch_python_sdk.models.health import Health
2424
from meilisearch_python_sdk.models.index import IndexInfo
25-
from meilisearch_python_sdk.models.search import SearchParams, SearchResultsWithUID
25+
from meilisearch_python_sdk.models.search import (
26+
Federation,
27+
SearchParams,
28+
SearchResultsFederated,
29+
SearchResultsWithUID,
30+
)
2631
from meilisearch_python_sdk.models.settings import MeilisearchSettings
2732
from meilisearch_python_sdk.models.task import TaskInfo, TaskResult, TaskStatus
2833
from meilisearch_python_sdk.models.version import Version
@@ -633,13 +638,19 @@ async def update_key(self, key: KeyUpdate) -> Key:
633638
return Key(**response.json())
634639

635640
async def multi_search(
636-
self, queries: list[SearchParams], *, hits_type: Any = JsonDict
637-
) -> list[SearchResultsWithUID]:
641+
self,
642+
queries: list[SearchParams],
643+
*,
644+
federation: Federation | None = None,
645+
hits_type: Any = JsonDict,
646+
) -> list[SearchResultsWithUID] | SearchResultsFederated:
638647
"""Multi-index search.
639648
640649
Args:
641650
642651
queries: List of SearchParameters
652+
federation: If included a single search result with hits built from all queries. This
653+
parameter can only be used with Meilisearch >= v1.10.0. Defaults to None.
643654
hits_type: Allows for a custom type to be passed to use for hits. Defaults to
644655
JsonDict
645656
@@ -664,11 +675,28 @@ async def multi_search(
664675
>>> search_results = await client.search(queries)
665676
"""
666677
url = "multi-search"
678+
if federation:
679+
processed_queries = []
680+
for query in queries:
681+
q = query.model_dump(by_alias=True)
682+
del q["limit"]
683+
del q["offset"]
684+
processed_queries.append(q)
685+
else:
686+
processed_queries = [x.model_dump(by_alias=True) for x in queries]
687+
667688
response = await self._http_requests.post(
668689
url,
669-
body={"queries": [x.model_dump(by_alias=True) for x in queries]}, # type: ignore[attr-defined]
690+
body={
691+
"federation": federation.model_dump(by_alias=True) if federation else None,
692+
"queries": processed_queries,
693+
},
670694
)
671695

696+
if federation:
697+
results = response.json()
698+
return SearchResultsFederated[hits_type](**results)
699+
672700
return [SearchResultsWithUID[hits_type](**x) for x in response.json()["results"]]
673701

674702
async def get_raw_index(self, uid: str) -> IndexInfo | None:
@@ -1510,13 +1538,19 @@ def update_key(self, key: KeyUpdate) -> Key:
15101538
return Key(**response.json())
15111539

15121540
def multi_search(
1513-
self, queries: list[SearchParams], *, hits_type: Any = JsonDict
1514-
) -> list[SearchResultsWithUID]:
1541+
self,
1542+
queries: list[SearchParams],
1543+
*,
1544+
federation: Federation | None = None,
1545+
hits_type: Any = JsonDict,
1546+
) -> list[SearchResultsWithUID] | SearchResultsFederated:
15151547
"""Multi-index search.
15161548
15171549
Args:
15181550
15191551
queries: List of SearchParameters
1552+
federation: If included a single search result with hits built from all queries. This
1553+
parameter can only be used with Meilisearch >= v1.10.0. Defaults to None.
15201554
hits_type: Allows for a custom type to be passed to use for hits. Defaults to
15211555
JsonDict
15221556
@@ -1541,11 +1575,28 @@ def multi_search(
15411575
>>> search_results = client.search(queries)
15421576
"""
15431577
url = "multi-search"
1578+
if federation:
1579+
processed_queries = []
1580+
for query in queries:
1581+
q = query.model_dump(by_alias=True)
1582+
del q["limit"]
1583+
del q["offset"]
1584+
processed_queries.append(q)
1585+
else:
1586+
processed_queries = [x.model_dump(by_alias=True) for x in queries]
1587+
15441588
response = self._http_requests.post(
15451589
url,
1546-
body={"queries": [x.model_dump(by_alias=True) for x in queries]}, # type: ignore[attr-defined]
1590+
body={
1591+
"federation": federation.model_dump(by_alias=True) if federation else None,
1592+
"queries": processed_queries,
1593+
},
15471594
)
15481595

1596+
if federation:
1597+
results = response.json()
1598+
return SearchResultsFederated[hits_type](**results)
1599+
15491600
return [SearchResultsWithUID[hits_type](**x) for x in response.json()["results"]]
15501601

15511602
def get_raw_index(self, uid: str) -> IndexInfo | None:

0 commit comments

Comments
 (0)