diff --git a/src/meilisearch.ts b/src/meilisearch.ts index e3510c222..afc57a79e 100644 --- a/src/meilisearch.ts +++ b/src/meilisearch.ts @@ -30,9 +30,10 @@ import { DeleteTasksQuery, MultiSearchParams, FederatedMultiSearchParams, + MultiSearchResponse, + SearchResponse, BatchesResults, BatchesQuery, - MultiSearchResponseOrSearchResponse, } from "./types"; import { HttpRequests } from "./http-requests"; import { TaskClient, Task } from "./task"; @@ -198,33 +199,37 @@ export class MeiliSearch { /// /** - * Perform multiple search queries. + * https://www.meilisearch.com/docs/reference/api/multi_search * - * It is possible to make multiple search queries on the same index or on - * different ones - * - * @example - * - * ```ts - * client.multiSearch({ - * queries: [ - * { indexUid: "movies", q: "wonder" }, - * { indexUid: "books", q: "flower" }, - * ], - * }); - * ``` + * @param queries - Search queries + * @param config - Additional request configuration options + * @returns Promise containing the search responses + */ + readonly multiSearch = < + T extends Record = Record, + >( + ...params: [queries: MultiSearchParams, config?: Partial] + ) => this.#multiSearch(...params) as Promise>; + + /** + * https://www.meilisearch.com/docs/reference/api/multi_search#federation * * @param queries - Search queries * @param config - Additional request configuration options * @returns Promise containing the search responses */ - async multiSearch< - T1 extends MultiSearchParams | FederatedMultiSearchParams, - T2 extends Record = Record, + readonly federatedMultiSearch = < + T extends Record = Record, + >( + ...params: [queries: FederatedMultiSearchParams, config?: Partial] + ) => this.#multiSearch(...params) as Promise>; + + async #multiSearch< + T extends Record = Record, >( - queries: T1, + queries: MultiSearchParams | FederatedMultiSearchParams, config?: Partial, - ): Promise> { + ): Promise | SearchResponse> { const url = `multi-search`; return await this.httpRequest.post(url, queries, undefined, config); diff --git a/src/types/types.ts b/src/types/types.ts index bf72a54f7..7b4bc1dfb 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -300,13 +300,6 @@ export type MultiSearchResponse> = { results: Array>; }; -export type MultiSearchResponseOrSearchResponse< - T1 extends FederatedMultiSearchParams | MultiSearchParams, - T2 extends Record = Record, -> = T1 extends FederatedMultiSearchParams - ? SearchResponse - : MultiSearchResponse; - export type FieldDistribution = { [field: string]: number; }; diff --git a/tests/search.test.ts b/tests/search.test.ts index 402eec344..5473e94cf 100644 --- a/tests/search.test.ts +++ b/tests/search.test.ts @@ -195,8 +195,7 @@ describe.each([ test(`${permission} key: Multi index search with federation`, async () => { const client = await getClient(permission); - const response1 = await client.multiSearch< - FederatedMultiSearchParams, + const response1 = await client.federatedMultiSearch< Books | { id: number; asd: string } >({ federation: {}, @@ -216,7 +215,7 @@ describe.each([ expect(response1.hits.length).toEqual(2); expect(response1.hits[0].id).toEqual(456); - const response2 = await client.multiSearch({ + const response2 = await client.federatedMultiSearch({ federation: {}, queries: [ { @@ -255,10 +254,7 @@ describe.each([ await masterClient.waitForTask(task2); // Make a multi search on both indexes with facetsByIndex - const response = await client.multiSearch< - FederatedMultiSearchParams, - Books | Movies - >({ + const response = await client.federatedMultiSearch({ federation: { limit: 20, offset: 0, @@ -336,10 +332,7 @@ describe.each([ await masterClient.waitForTask(task2); // Make a multi search on both indexes with mergeFacets - const response = await client.multiSearch< - FederatedMultiSearchParams, - Books | Movies - >({ + const response = await client.federatedMultiSearch({ federation: { limit: 20, offset: 0,