2222)
2323from meilisearch_python_sdk .models .health import Health
2424from 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+ )
2631from meilisearch_python_sdk .models .settings import MeilisearchSettings
2732from meilisearch_python_sdk .models .task import TaskInfo , TaskResult , TaskStatus
2833from 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