Meilisearch Python SDK は、Meilisearch API の非同期クライアントと同期クライアントの両方を提供します。
どのクライアントを使用するかは、ユースケースによって異なります。作業しているコード ベースで asyncio が使用されている場合 (たとえば、FastAPI を使用している場合)、 AsyncClient
選択し、それ以外の場合は sync Client
を選択します。 2 つのクライアントの機能は同じですが、 AsyncClient
非同期メソッドを提供し、独自の追加の非同期メソッドとともにAsyncIndex
を使用する点が異なります。一方、 Client
ブロッキング メソッドを提供し、独自のブロッキング メソッドでIndex
を使用します。
このパッケージをインストールするには、仮想環境の使用を推奨します。仮想環境が作成されアクティブ化されたら、次のコマンドを使用してパッケージをインストールします。
pip install meilisearch-python-sdk
Meilisearch を実行するにはいくつかの方法があります。自分のユースケースに最適なものを選択して、サーバーを起動します。
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 )
サーバーは、更新のステータスを取得するために使用できる更新 ID を返します。これを行うには、ドキュメントを追加した結果の応答を変数に保存します。これはUpdateId
オブジェクトとなり、それを使用して更新のステータスを確認します。
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" ,
)
パラメーターに関する情報は、ドキュメントの検索パラメーターのセクションにあります。
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" ,
)
次のベンチマークでは、このライブラリと公式の Meilisearch Python ライブラリを比較します。 AsyncClient
で見られるパフォーマンスの向上はすべて、asyncio を利用することによって達成されることに注意してください。これは、コードが asyncio を利用していない場合、またはイベント ループをブロックしていない場合、ここでの利点は見られず、クライアント間のパフォーマンスは非常に類似することを意味します。
このテストでは、インデックス作成のために 100 万件のドキュメントを 1,000 件のバッチで Meilisearch サーバーに送信するのにかかる時間を比較します (短いほど良い)。この時間には、Meilisearch がドキュメントのインデックスを作成するのにかかる時間は考慮されていません。これはライブラリの機能の範囲外であるためです。
このテストでは、1000 件の検索を完了するのにかかる時間を比較します (短いほど良い)。
Prashanth Rao はいくつかの独立したテストを行った結果、この非同期クライアントは同期クライアントよりもデータの取り込みが最大 30% 高速であることがわかりました。彼がどのようにテストしたかについては、ブログ投稿で詳しく説明されています。
pytest-meilisearch は、コードのテストに役立つ pytest プラグインです。必要となる多くの定型コードが提供されます。
完全なドキュメントについては、ドキュメントを参照してください。
このプロジェクトへの貢献は大歓迎です。貢献に興味がある場合は、貢献ガイドをご覧ください。