Meilisearch Python SDK предоставляет как асинхронный, так и синхронизирующий клиент для Meilisearch API.
Какой клиент использовать, зависит от вашего варианта использования. Если база кода, с которой вы работаете, использует asyncio, например, если вы используете FastAPI, выберите AsyncClient
, в противном случае выберите sync Client
. Функциональность двух клиентов одинакова, разница в том, что 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 )
Сервер вернет идентификатор обновления, который можно использовать для получения статуса обновлений. Для этого вам следует сохранить ответ о результате добавления документов в переменную, это будет объект 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 или не блокирует цикл событий, выигрыш здесь не будет виден, а производительность между клиентами будет очень похожей.
В этом тесте сравнивается время, необходимое для отправки 1 миллиона документов пакетами по 1 тысяче на сервер Meilisearch для индексации (чем меньше, тем лучше). Время не учитывает, сколько времени требуется Meilisearch для индексации документов, поскольку это выходит за рамки функциональности библиотеки.
В этом тесте сравнивается время, необходимое для выполнения 1000 поисковых запросов (чем меньше, тем лучше).
Прашант Рао провел независимое тестирование и обнаружил, что этот асинхронный клиент примерно на 30 % быстрее, чем синхронизирующий клиент, при приеме данных. Вы можете найти хорошее описание результатов, как он их тестировал, в своем блоге.
pytest-meilisearch — это плагин pytest, который может помочь в тестировании вашего кода. Он предоставляет много шаблонного кода, который вам понадобится.
Полную документацию смотрите в нашей документации.
Вклад в этот проект приветствуется. Если вы заинтересованы в том, чтобы внести свой вклад, ознакомьтесь с нашим руководством по участию.