Skip to content

Commit

Permalink
Add multiple searches
Browse files Browse the repository at this point in the history
Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

Update meilisearch/client.py

Co-authored-by: Bruno Casali <brunoocasali@gmail.com>

Fix error names
  • Loading branch information
alallema committed Mar 29, 2023
1 parent c3b668c commit ec35e5d
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
26 changes: 26 additions & 0 deletions meilisearch/client.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# pylint: disable=too-many-public-methods

from __future__ import annotations

import base64
Expand Down Expand Up @@ -205,6 +207,30 @@ def index(self, uid: str) -> Index:
return Index(self.config, uid=uid)
raise ValueError("The index UID should not be None")

def multi_search(self, queries: List[Dict[str, Any]]) -> Dict[str, List[Dict[str, Any]]]:
"""Multi-index search.
Parameters
----------
queries:
List of dictionaries containing the specified indexes and their search queries
https://docs.meilisearch.com/reference/api/search.html#search-in-an-index
Returns
-------
results:
Dictionary of results for each index
Raises
------
MeilisearchApiError
An error containing details about why Meilisearch can't process your request. Meilisearch error codes are described here: https://docs.meilisearch.com/errors/#meilisearch-errors
"""
return self.http.post(
f"{self.config.paths.multi_search}",
body={"queries": queries},
)

def get_all_stats(self) -> Dict[str, Any]:
"""Get all stats of Meilisearch
Expand Down
1 change: 1 addition & 0 deletions meilisearch/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class Paths:
task = "tasks"
stat = "stats"
search = "search"
multi_search = "multi-search"
document = "documents"
setting = "settings"
ranking_rules = "ranking-rules"
Expand Down
34 changes: 34 additions & 0 deletions tests/client/test_client_multi_search_meilisearch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import pytest

from meilisearch.errors import MeilisearchApiError


def test_basic_multi_search(client, empty_index):
"""Tests multi-search on two indexes."""
empty_index("indexA")
empty_index("indexB")
response = client.multi_search(
[{"indexUid": "indexA", "q": ""}, {"indexUid": "indexB", "q": ""}]
)

assert isinstance(response, dict)
assert response["results"][0]["indexUid"] == "indexA"
assert response["results"][1]["indexUid"] == "indexB"
assert response["results"][0]["limit"] == 20
assert response["results"][1]["limit"] == 20


def test_multi_search_one_index(client, empty_index):
"""Tests multi-search on a simple query."""
empty_index("indexA")
response = client.multi_search([{"indexUid": "indexA", "q": ""}])

assert isinstance(response, dict)
assert response["results"][0]["indexUid"] == "indexA"
assert response["results"][0]["limit"] == 20


def test_multi_search_on_no_index(client):
"""Tests multi-search on a non existing index."""
with pytest.raises(MeilisearchApiError):
client.multi_search([{"indexUid": "indexDoesNotExist", "q": ""}])

0 comments on commit ec35e5d

Please sign in to comment.