
⚡ Клиент Meilisearch API написан для ржавчины?
Meilisearch Rust - это клиент Meilisearch API для разработчиков Rust.
Meilisearch -это поисковая система с открытым исходным кодом. Узнайте больше о Meilisearch.
Этот README содержит всю документацию, которая должна начать использовать эту Meilisearch SDK.
Для общей информации о том, как использовать Meilisearch, например, как наша ссылка API, учебные пособия, руководства и подробные статьи,-напишите на наш основной веб-сайт документации.
Попрощайтесь с развертыванием сервера и ручным обновлением с Meilisearch Cloud. Начните с 14-дневной бесплатной пробной версией! Никакой кредитной карты не требуется.
Чтобы использовать meilisearch-sdk , добавьте это в свой Cargo.toml :
[ dependencies ]
meilisearch-sdk = " 0.27.1 "Следующие дополнительные зависимости также могут быть полезны:
futures = " 0.3 " # To be able to block on async functions if you are not using an async runtime
serde = { version = " 1.0 " , features = [ " derive " ] } Этот ящик является async , но вы можете использовать асинхронное время выполнения, например, Tokio или просто блокировать фьючерсы. Вы можете позволить функции sync сделать большинство структурных Sync . Это может быть немного медленнее.
Использование этого ящика возможно без SERDE, но многие функции требуют SERDE.
Этот ящик требует запуска Meilisearch Server.
Есть много простых способов загрузить и запустить экземпляр Meilisearch.
Например, используя команду curl в вашем терминале:
# Install Meilisearch
curl -L https://install.meilisearch.com | sh
# Launch Meilisearch
./meilisearch --master-key=masterKeyNB: Вы также можете скачать Meilisearch от Homebrew или Apt .
use meilisearch_sdk :: client :: * ;
use serde :: { Serialize , Deserialize } ;
use futures :: executor :: block_on ;
# [ derive ( Serialize , Deserialize , Debug ) ]
struct Movie {
id : usize ,
title : String ,
genres : Vec < String > ,
}
# [ tokio :: main ( flavor = "current_thread" ) ]
async fn main ( ) {
// Create a client (without sending any request so that can't fail)
let client = Client :: new ( MEILISEARCH_URL , Some ( MEILISEARCH_API_KEY ) ) . unwrap ( ) ;
// An index is where the documents are stored.
let movies = client . index ( "movies" ) ;
// Add some movies in the index. If the index 'movies' does not exist, Meilisearch creates it when you first add the documents.
movies . add_documents ( & [
Movie { id : 1 , title : String :: from ( "Carol" ) , genres : vec ! [ "Romance" .to_string ( ) , "Drama" .to_string ( ) ] } ,
Movie { id : 2 , title : String :: from ( "Wonder Woman" ) , genres : vec ! [ "Action" .to_string ( ) , "Adventure" .to_string ( ) ] } ,
Movie { id : 3 , title : String :: from ( "Life of Pi" ) , genres : vec ! [ "Adventure" .to_string ( ) , "Drama" .to_string ( ) ] } ,
Movie { id : 4 , title : String :: from ( "Mad Max" ) , genres : vec ! [ "Adventure" .to_string ( ) , "Science Fiction" .to_string ( ) ] } ,
Movie { id : 5 , title : String :: from ( "Moana" ) , genres : vec ! [ "Fantasy" .to_string ( ) , "Action" .to_string ( ) ] } ,
Movie { id : 6 , title : String :: from ( "Philadelphia" ) , genres : vec ! [ "Drama" .to_string ( ) ] } ,
] , Some ( "id" ) ) . await . unwrap ( ) ;
} С помощью uid вы можете проверить статус ( enqueued , canceled , processing , succeeded или failed ) добавления ваших документов с использованием задачи.
// Meilisearch is typo-tolerant:
println ! ( "{:?}" , client.index ( "movies_2" ) .search ( ) .with_query ( "caorl" ) .execute::< Movie > ( ) . await .unwrap ( ) .hits ) ;Выход:
[Movie { id: 1, title: String::from("Carol"), genres: vec!["Romance", "Drama"] }]
Json output:
{
"hits" : [{
"id" : 1 ,
"title" : " Carol " ,
"genres" : [ " Romance " , " Drama " ]
}],
"offset" : 0 ,
"limit" : 10 ,
"processingTimeMs" : 1 ,
"query" : " caorl "
} let search_result = client . index ( "movies_3" )
. search ( )
. with_query ( "phil" )
. with_attributes_to_highlight ( Selectors :: Some ( & [ "*" ] ) )
. execute :: < Movie > ( )
. await
. unwrap ( ) ;
println ! ( "{:?}" , search_result.hits ) ;Json output:
{
"hits" : [
{
"id" : 6 ,
"title" : " Philadelphia " ,
"_formatted" : {
"id" : 6 ,
"title" : " <em>Phil</em>adelphia " ,
"genre" : [ " Drama " ]
}
}
],
"offset" : 0 ,
"limit" : 20 ,
"processingTimeMs" : 0 ,
"query" : " phil "
} Если вы хотите включить фильтрацию, вы должны добавить свои атрибуты в настройку индекса filterableAttributes .
let filterable_attributes = [
"id" ,
"genres" ,
] ;
client . index ( "movies_4" ) . set_filterable_attributes ( & filterable_attributes ) . await . unwrap ( ) ;Вам нужно выполнить эту операцию только один раз.
Обратите внимание, что Meilisearch будет восстанавливать ваш индекс, когда вы обновляете filterableAttributes . В зависимости от размера вашего набора данных, это может занять время. Вы можете отслеживать процесс, используя задачи.
Затем вы можете выполнить поиск:
let search_result = client . index ( "movies_5" )
. search ( )
. with_query ( "wonder" )
. with_filter ( "id > 1 AND genres = Action" )
. execute :: < Movie > ( )
. await
. unwrap ( ) ;
println ! ( "{:?}" , search_result.hits ) ;Json output:
{
"hits" : [
{
"id" : 2 ,
"title" : " Wonder Woman " ,
"genres" : [ " Action " , " Adventure " ]
}
],
"offset" : 0 ,
"limit" : 20 ,
"estimatedTotalHits" : 1 ,
"processingTimeMs" : 0 ,
"query" : " wonder "
}HttpClient По умолчанию SDK использует reqwest для выполнения HTTP -вызовов. SDK позволяет вам настроить клиент HTTP, реализуя черту HttpClient самостоятельно и инициализируя Client с помощью метода new_with_client . Вас может быть заинтересован функцией futures-unsend , которая позволяет вам указать клиент HTTP без предложения.
SDK поддерживает WASM через REQWEST. Тем не менее, вам нужно будет включить функцию futures-unsend при ее импорте.
Этот ящик полностью поддерживает WASM.
Единственная разница между WASM и нативной версией заключается в том, что нативная версия имеет еще один вариант ( Error::Http ) в перечислении ошибки. Это не должно иметь большого значения, но мы могли бы добавить этот вариант в WASM.
Тем не менее, разработка программы, предназначенная для запуска в веб -браузере, требует совершенно иного дизайна, чем программа CLI. Чтобы увидеть пример простого веб -приложения Rust с использованием Meilisearch, см. Наш демо.
Предупреждение: meilisearch-sdk будет паниковать, если окно не будет доступно (например: Интернет).
Этот пакет гарантирует совместимость с версией V1.x из Meilisearch, но некоторые функции могут отсутствовать. Пожалуйста, проверьте проблемы для получения дополнительной информации.
Любой новый вклад более чем приветствуется в этом проекте!
Если вы хотите узнать больше о рабочем процессе разработки или хотите внести свой вклад, пожалуйста, посетите наши рекомендации для получения подробных инструкций!
Meilisearch предоставляет и поддерживает множество инструментов SDK и интеграции, подобных этой. Мы хотим предоставить всем удивительный поисковый опыт для любого вида проекта . Если вы хотите внести свой вклад, внести предложения или просто знаете, что происходит прямо сейчас, посетите нас в репозитории интеграции.