
⚡ عميل Meilisearch API مكتوب لـ Rust؟
Meilisearch Rust هو عميل Meilisearch API لمطوري الصدأ.
Meilisearch هو محرك بحث مفتوح المصدر. تعرف على المزيد حول Meilisearch.
يحتوي هذا ReadMe على جميع الوثائق التي تحتاجها لبدء استخدام Meilisearch SDK هذا.
للحصول على معلومات عامة حول كيفية استخدام Meilisearch-مثل مرجع واجهة برمجة التطبيقات الخاصة بنا ، والدروس التعليمية ، والأدلة ، والمقالات المتعمقة-تشير إلى موقع الوثائق الرئيسية لدينا.
قل وداعًا لنشر الخادم والتحديثات اليدوية مع 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 لتشغيله.
هناك العديد من الطرق السهلة لتنزيل وتشغيل مثيل 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:
{
"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:
{
"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:
{
"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 ويحافظ على العديد من SDKs وأدوات التكامل مثل هذا واحد. نريد تزويد الجميع بتجربة بحث مذهلة لأي نوع من المشروع . إذا كنت ترغب في المساهمة ، أو تقديم اقتراحات ، أو تعرف فقط ما يجري الآن ، تفضل بزيارتنا في مستودع دليل التكامل.