
⚡ ¿El cliente de la API de Meilisearch escrito para Rust?
Meilisearch Rust es el cliente API Meilisearch para desarrolladores de Rust.
Meilisearch es un motor de búsqueda de código abierto. Obtenga más información sobre Meilisearch.
Este ReadMe contiene toda la documentación que necesita para comenzar a usar este SDK de Meilisearch.
Para obtener información general sobre cómo usar Meilisearch, como nuestra referencia de API, tutoriales, guías y artículos en profundidad, referir a nuestro sitio web de documentación principal.
Diga adiós a la implementación del servidor y actualizaciones manuales con Meilisearch Cloud. ¡Comience con una prueba gratuita de 14 días! No se requiere tarjeta de crédito.
Para usar meilisearch-sdk , agregue esto a su Cargo.toml :
[ dependencies ]
meilisearch-sdk = " 0.27.1 "Las siguientes dependencias opcionales también pueden ser útiles:
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 " ] } Esta caja es async , pero puede optar por usar un tiempo de ejecución de Async como Tokio o simplemente bloquear en futuros. Puede habilitar la función sync para que la mayoría de las estructuras Sync . Puede ser un poco más lento.
El uso de esta caja es posible sin Serde, pero muchas características requieren SERDE.
Esta caja requiere un servidor Meilisearch para ejecutar.
Hay muchas formas fáciles de descargar y ejecutar una instancia de Meilisearch.
Por ejemplo, usando el comando curl en su terminal:
# Install Meilisearch
curl -L https://install.meilisearch.com | sh
# Launch Meilisearch
./meilisearch --master-key=masterKeyNB: También puedes descargar Meilisearch de HomeBrew o 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 ( ) ;
} Con el uid , puede verificar el estado ( enqueued , canceled , processing , succeeded o failed ) de la adición de sus documentos utilizando la tarea.
// Meilisearch is typo-tolerant:
println ! ( "{:?}" , client.index ( "movies_2" ) .search ( ) .with_query ( "caorl" ) .execute::< Movie > ( ) . await .unwrap ( ) .hits ) ;Producción:
[Movie { id: 1, title: String::from("Carol"), genres: vec!["Romance", "Drama"] }]
Salida de JSON:
{
"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 ) ;Salida de JSON:
{
"hits" : [
{
"id" : 6 ,
"title" : " Philadelphia " ,
"_formatted" : {
"id" : 6 ,
"title" : " <em>Phil</em>adelphia " ,
"genre" : [ " Drama " ]
}
}
],
"offset" : 0 ,
"limit" : 20 ,
"processingTimeMs" : 0 ,
"query" : " phil "
} Si desea habilitar el filtrado, debe agregar sus atributos a la configuración del índice filterableAttributes .
let filterable_attributes = [
"id" ,
"genres" ,
] ;
client . index ( "movies_4" ) . set_filterable_attributes ( & filterable_attributes ) . await . unwrap ( ) ;Solo necesita realizar esta operación una vez.
Tenga en cuenta que MeilISearch reconstruirá su índice cada vez que actualice filterableAttributes . Dependiendo del tamaño de su conjunto de datos, esto podría llevar tiempo. Puede rastrear el proceso utilizando las tareas.
Entonces, puedes realizar la búsqueda:
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 ) ;Salida de JSON:
{
"hits" : [
{
"id" : 2 ,
"title" : " Wonder Woman " ,
"genres" : [ " Action " , " Adventure " ]
}
],
"offset" : 0 ,
"limit" : 20 ,
"estimatedTotalHits" : 1 ,
"processingTimeMs" : 0 ,
"query" : " wonder "
}HttpClient Por defecto, el SDK usa reqwest para realizar llamadas HTTP. El SDK le permite personalizar el cliente HTTP implementando el rasgo HttpClient usted mismo e inicializando al Client con el método new_with_client . Es posible que le interese la función futures-unsend que le permite especificar un cliente HTTP que no sea en exceso.
El SDK admite WASM a través de ReqWest. Sin embargo, deberá habilitar la función futures-unsend mientras la importe.
Esta caja es compatible con WASM.
La única diferencia entre el WASM y la versión nativa es que la versión nativa tiene una variante más ( Error::Http ) en el Error Enum. Eso no debería importar tanto, pero también podríamos agregar esta variante en WASM.
Sin embargo, hacer un programa destinado a ejecutarse en un navegador web requiere un diseño muy diferente al de un programa CLI. Para ver un ejemplo de una aplicación web simple de óxido que usa Meilisearch, vea nuestra demostración.
ADVERTENCIA: meilisearch-sdk entrará en pánico si no hay ventana disponible (Ex: Extensión web).
Este paquete garantiza la compatibilidad con la versión v1.x de Meilisearch, pero algunas características pueden no estar presentes. Consulte los problemas para obtener más información.
¡Cualquier nueva contribución es más que bienvenida en este proyecto!
Si desea saber más sobre el flujo de trabajo de desarrollo o desea contribuir, ¡visite nuestras pautas contribuyentes para obtener instrucciones detalladas!
Meilisearch proporciona y mantiene muchos SDK y herramientas de integración como esta. Queremos proporcionar a todos una experiencia de búsqueda increíble para cualquier tipo de proyecto . Si desea contribuir, haga sugerencias o simplemente sepa lo que está sucediendo en este momento, visítenos en el repositorio de integración-guías.