Das Meilisearch Python SDK bietet sowohl einen asynchronen als auch einen synchronisierten Client für die Meilisearch-API.
Welcher Client verwendet werden soll, hängt von Ihrem Anwendungsfall ab. Wenn die Codebasis, mit der Sie arbeiten, Asyncio verwendet, beispielsweise wenn Sie FastAPI verwenden, wählen Sie AsyncClient
aus, andernfalls wählen Sie Sync Client
. Die Funktionalität der beiden Clients ist dieselbe. Der Unterschied besteht darin, dass der AsyncClient
asynchrone Methoden bereitstellt und den AsyncIndex
mit seinen eigenen zusätzlichen asynchronen Methoden verwendet. Andererseits stellt Client
Blockierungsmethoden bereit und verwendet den Index
mit seinen eigenen Blockierungsmethoden.
Für die Installation dieses Pakets wird die Verwendung einer virtuellen Umgebung empfohlen. Sobald die virtuelle Umgebung erstellt und aktiviert ist, installieren Sie das Paket mit:
pip install meilisearch-python-sdk
Es gibt mehrere Möglichkeiten, Meilisearch auszuführen. Wählen Sie diejenige aus, die für Ihren Anwendungsfall am besten geeignet ist, und starten Sie dann den Server.
Als Beispiel für die Verwendung von Docker:
docker pull getmeili/meilisearch:latest
docker run -it --rm -p 7700:7700 getmeili/meilisearch:latest ./meilisearch --master-key=masterKey
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 )
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 )
Der Server gibt eine Update-ID zurück, die zum Abrufen des Status der Updates verwendet werden kann. Dazu speichern Sie die Ergebnisantwort aus dem Hinzufügen der Dokumente in einer Variablen, dies ist ein UpdateId
-Objekt, und verwenden Sie es, um den Status der Aktualisierungen zu überprüfen.
update = await index . add_documents ( documents )
status = await client . index ( 'books' ). get_update_status ( update . update_id )
update = index . add_documents ( documents )
status = client . index ( 'books' ). get_update_status ( update . update_id )
search_result = await index . search ( "ready player" )
search_result = index . search ( "ready player" )
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" ,
)
Informationen zu den Parametern finden Sie im Abschnitt Suchparameter der Dokumentation.
await index . search (
"guide" ,
attributes_to_highlight = [ "title" ],
filters = "book_id > 10"
)
index . search (
"guide" ,
attributes_to_highlight = [ "title" ],
filters = "book_id > 10"
)
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" ,
)
Die folgenden Benchmarks vergleichen diese Bibliothek mit der offiziellen Meilisearch-Python-Bibliothek. Beachten Sie, dass alle mit AsyncClient
erzielten Leistungssteigerungen durch die Nutzung von Asyncio erzielt werden. Das heißt, wenn Ihr Code Asyncio nicht nutzt oder die Ereignisschleife nicht blockiert, werden die Vorteile hier nicht sichtbar und die Leistung zwischen den Clients wird sehr ähnlich sein.
Dieser Test vergleicht, wie lange es dauert, 1 Million Dokumente in Stapeln von 1.000 an den Meilisearch-Server zur Indizierung zu senden (weniger ist besser). Die Zeit berücksichtigt nicht, wie lange Meilisearch für die Indizierung der Dokumente benötigt, da dies außerhalb der Bibliotheksfunktionalität liegt.
Dieser Test vergleicht, wie lange es dauert, 1.000 Suchvorgänge abzuschließen (weniger ist besser).
Prashanth Rao hat einige unabhängige Tests durchgeführt und festgestellt, dass dieser asynchrone Client bei der Datenaufnahme etwa 30 % schneller ist als der synchronisierte Client. Eine gute Zusammenfassung der Ergebnisse und wie er sie getestet hat, finden Sie in seinem Blogbeitrag.
pytest-meilisearch ist ein Pytest-Plugin, das Ihnen beim Testen Ihres Codes helfen kann. Es enthält einen Großteil des Boiler-Plate-Codes, den Sie benötigen.
Die vollständige Dokumentation finden Sie in unseren Dokumenten.
Beiträge zu diesem Projekt sind willkommen. Wenn Sie daran interessiert sind, einen Beitrag zu leisten, lesen Sie bitte unseren Beitragsleitfaden