Skip to main content

A Python async client for the Meilisearch API

Project description

Meilisearch Python SDK

Tests Status pre-commit.ci status Coverage PyPI version PyPI - Python Version

:warning: This project was previously named meilisearch-python-async. Development on that project continues here under the new name.

Meilisearch Python SDK provides both an async and sync client for the Meilisearch API.

Which client to use depends on your use case. If the code base you are working with uses asyncio, for example if you are using FastAPI, choose the AsyncClient, otherwise choose the sync Client. The functionality of the two clients is the same, the difference being that the AsyncClient provides async methods and uses the AsyncIndex with its own additional async methods. On the other hand, Client provides blocking methods and uses the Index with its own blocking methods.

Installation

Using a virtual environment is recommended for installing this package. Once the virtual environment is created and activated, install the package with:

pip install meilisearch-python-sdk

Run Meilisearch

There are several ways to run Meilisearch. Pick the one that works best for your use case and then start the server.

As as example to use Docker:

docker pull getmeili/meilisearch:latest
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey

Usage

Add Documents

AsyncClient

  • Note: `client.index("books") creates an instance of an AsyncIndex object but does not make a network call to send the data yet so it does not need to be awaited.
from meilisearch_python_sdk import AsyncClient

async with AsyncClient('http://127.0.0.1:7700', 'masterKey') as client:
    index = client.index("books")

    documents = [
        {"id": 1, "title": "Ready Player One"},
        {"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
    ]

    await index.add_documents(documents)

Client

from meilisearch_python_sdk import Client

client = Client('http://127.0.0.1:7700', 'masterKey')
index = client.index("books")

documents = [
    {"id": 1, "title": "Ready Player One"},
    {"id": 42, "title": "The Hitchhiker's Guide to the Galaxy"},
]

index.add_documents(documents)

The server will return an update id that can be used to get the status of the updates. To do this you would save the result response from adding the documents to a variable, this will be an UpdateId object, and use it to check the status of the updates.

AsyncClient

update = await index.add_documents(documents)
status = await client.index('books').get_update_status(update.update_id)

Client

update = index.add_documents(documents)
status = client.index('books').get_update_status(update.update_id)

Basic Searching

AsyncClient

search_result = await index.search("ready player")

Client

search_result = index.search("ready player")

Base Search Results: SearchResults object with values

SearchResults(
    hits = [
        {
            "id": 1,
            "title": "Ready Player One",
        },
    ],
    offset = 0,
    limit = 20,
    nb_hits = 1,
    exhaustive_nb_hits = bool,
    facets_distributionn = None,
    processing_time_ms = 1,
    query = "ready player",
)

Custom Search

Information about the parameters can be found in the search parameters section of the documentation.

AsyncClient

await index.search(
    "guide",
    attributes_to_highlight=["title"],
    filters="book_id > 10"
)

Client

index.search(
    "guide",
    attributes_to_highlight=["title"],
    filters="book_id > 10"
)

Custom Search Results: SearchResults object with values

SearchResults(
    hits = [
        {
            "id": 42,
            "title": "The Hitchhiker's Guide to the Galaxy",
            "_formatted": {
                "id": 42,
                "title": "The Hitchhiker's Guide to the <em>Galaxy</em>"
            }
        },
    ],
    offset = 0,
    limit = 20,
    nb_hits = 1,
    exhaustive_nb_hits = bool,
    facets_distributionn = None,
    processing_time_ms = 5,
    query = "galaxy",
)

Benchmark

The following benchmarks compare this library to the official Meilisearch Python library. Note that all of the performance gains seen with the AsyncClient are achieved by taking advantage of asyncio. This means that if your code is not taking advantage of asyncio or it does not block the event loop, the gains here will not be seen and the performance between the clients will be very similar.

Add Documents in Batches

This test compares how long it takes to send 1 million documents in batches of 1 thousand to the Meilisearch server for indexing (lower is better). The time does not take into account how long Meilisearch takes to index the documents since that is outside of the library functionality.

Add Documents in Batches

Muiltiple Searches

This test compares how long it takes to complete 1000 searches (lower is better)

Multiple Searches

Independent testing

Prashanth Rao did some independent testing and found this async client to be ~30% faster than the sync client for data ingestion. You can find a good write-up of the results how he tested them in his blog post.

Testing

pytest-meilisearch is a pytest plugin that can help with testing your code. It provides a lot of the boiler plate code you will need.

Documentation

See our docs for the full documentation.

Contributing

Contributions to this project are welcome. If you are interested in contributing please see our contributing guide

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meilisearch_python_sdk-2.1.0.tar.gz (37.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meilisearch_python_sdk-2.1.0-py3-none-any.whl (42.3 kB view details)

Uploaded Python 3

File details

Details for the file meilisearch_python_sdk-2.1.0.tar.gz.

File metadata

  • Download URL: meilisearch_python_sdk-2.1.0.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.0 CPython/3.10.12 Linux/6.2.0-1015-azure

File hashes

Hashes for meilisearch_python_sdk-2.1.0.tar.gz
Algorithm Hash digest
SHA256 f892cadc3b91eb5109f8fc126aa997174d215cfd0760889fe3ffb0a9ff372d22
MD5 64cf880f026ab6caf2f6626e29d7ffa8
BLAKE2b-256 9fdf97acb541f42ab7f331d0aca61d6921aeaa7f12c8f41e24b61140dfce2121

See more details on using hashes here.

File details

Details for the file meilisearch_python_sdk-2.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for meilisearch_python_sdk-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c160b794084133044820d7848d79de36c670c7a684a9602b39b6b7de550d84c
MD5 f36744d7d43e7863213f25285afa2b10
BLAKE2b-256 677549d35035a46cc9275cef3f4a295c576c944fe639b590d17b47ec4107f248

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page