يرجى ملاحظة أن هذا المنتج ليس جاهزًا للإنتاج بعد، كما أن Toshi لا يزال قيد التطوير النشط، وأنا بطيء فقط.
من المفترض أن يكون Toshi محرك بحث للنصوص الكاملة مشابهًا لـ Elasticsearch. يسعى Toshi جاهداً ليكون بالنسبة إلى Elasticsearch ما يمثله Tantivy بالنسبة إلى Lucene.
سوف تستهدف Toshi دائمًا الصدأ المستقر وستبذل قصارى جهدها لعدم الاستفادة من الصدأ غير الآمن أبدًا. في حين أن المكتبات الأساسية قد تستخدم بعض العناصر غير الآمنة، ستبذل Toshi جهودًا متضافرة لفحص هذه المكتبات في محاولة لتكون خالية تمامًا من الاستخدام غير الآمن لـ Rust. السبب وراء اختياري لهذا هو أنني شعرت أنه لكي يصبح هذا خيارًا جذابًا للناس للنظر فيه، يجب أن يكون آمنًا ومستقرًا ومتسقًا. ولهذا السبب تم اختيار شركة Stable Rust لما توفره من ضمانات وأمان. لم أكن أرغب في الخوض في حفرة الأرانب المتمثلة في استخدام الميزات الليلية حتى أواجه مشكلات تتعلق باستقرارها لاحقًا. نظرًا لأن Toshi ليس من المفترض أن تكون مكتبة، فأنا موافق تمامًا على وجود هذا المطلب لأن الأشخاص الذين يرغبون في استخدام هذا على الأرجح سوف يزيلونه من الرف ولن يعدلوه. كان حافزي هو تلبية حالة الاستخدام هذه عند بناء Toshi.
في الوقت الحالي، يجب أن يعمل Toshi بشكل جيد على أنظمة التشغيل Windows وMac OS X وLinux. من متطلبات التبعية، ستحتاج إلى تثبيت 1.39.0 وCargo من أجل البناء. يمكنك الإصابة بالصدأ بسهولة من الصدأ.
يوجد ملف تكوين افتراضي في config/config.toml:
host = " 127.0.0.1 "
port = 8080
path = " data2/ "
writer_memory = 200000000
log_level = " info "
json_parsing_threads = 4
bulk_buffer_size = 10000
auto_commit_duration = 10
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
[ merge_policy ]
kind = " log "
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
host = "localhost"
سيتم ربط اسم المضيف Toshi عند البداية.
port = 8080
سيتم ربط منفذ Toshi عند البداية.
path = "data/"
مسار البيانات حيث سيقوم Toshi بتخزين بياناته ومؤشراته.
writer_memory = 200000000
مقدار الذاكرة (بالبايت) التي يجب أن يخصصها Toshi للالتزامات للمستندات الجديدة.
log_level = "info"
مستوى التفاصيل المطلوب استخدامه لتسجيل Toshi.
json_parsing_threads = 4
عندما يقوم Toshi باستيعاب مجموعة كبيرة من المستندات، فإنه سيقوم بتدوير عدد من سلاسل الرسائل لتحليل ملف json الخاص بالمستند عند استلامه. يتحكم هذا في عدد مؤشرات الترابط التي تم إنشاؤها للتعامل مع هذه المهمة.
bulk_buffer_size = 10000
سيؤدي هذا إلى التحكم في حجم المخزن المؤقت لتحليل المستندات إلى فهرس. وسوف يتحكم في مقدار الذاكرة التي سيشغلها الاستيعاب المجمع عن طريق الحظر عند امتلاء المخزن المؤقت للرسائل. إذا كنت تريد الخروج تمامًا عن المسار، فيمكنك ضبط هذا على 0 لجعل المخزن المؤقت غير محدود.
auto_commit_duration = 10
يتحكم هذا في عدد المرات التي سيلتزم فيها الفهرس بالمستندات تلقائيًا إذا كانت هناك مستندات مطلوب الالتزام بها. اضبط هذا على 0 لتعطيل هذه الميزة، ولكن سيتعين عليك القيام بالالتزامات بنفسك عند إرسال المستندات.
[ merge_policy ]
kind = " log "
سيقوم Tantivy بدمج مقاطع الفهرس وفقًا للتكوين الموضح هنا. هناك خياران لهذا. "log" وهو سلوك دمج المقاطع الافتراضي. يحتوي السجل على 3 قيم إضافية له أيضًا. يمكن حذف أي من هذه القيم الثلاث لاستخدام قيمة Tantivy الافتراضية. القيم الافتراضية مذكورة أدناه.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
بالإضافة إلى ذلك، هناك خيار "nomerge"، حيث لن يقوم Tantivy بدمج المقاطع.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
بشكل عام، هذه الإعدادات ليست جاهزة للاستخدام بعد لأنها غير مستقرة جدًا أو معطلة تمامًا. في الوقت الحالي، يقع توزيع Toshi خلف هذه العلامة، لذا إذا تم ضبط الإصدار التجريبي على false، فسيتم تجاهل كل هذه الإعدادات.
يمكن بناء Toshi باستخدام cargo build --release
. بمجرد إنشاء Toshi، يمكنك تشغيل ./target/release/toshi
من دليل المستوى الأعلى لبدء تشغيل Toshi وفقًا للتكوين الموجود في config/config.toml
يجب أن تحصل على رسالة بدء التشغيل مثل هذه.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
يمكنك التحقق من تشغيل Toshi باستخدام:
curl -X GET http://localhost:8080/
والتي يجب أن تعود:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
بمجرد تشغيل toshi، من الأفضل التحقق من ملف requests.http
الموجود في جذر هذا المشروع لرؤية المزيد من أمثلة الاستخدام.
{ "query" : { "term" : { "test_text" : " document " } }, "limit" : 10 }
{ "query" : { "fuzzy" : { "test_text" : { "value" : " document " , "distance" : 0 , "transposition" : false } } }, "limit" : 10 }
{ "query" : { "phrase" : { "test_text" : { "terms" : [ " test " , " document " ] } } }, "limit" : 10 }
{ "query" : { "range" : { "test_i64" : { "gte" : 2012 , "lte" : 2015 } } }, "limit" : 10 }
{ "query" : { "regex" : { "test_text" : " d[ou]{1}c[k]?ument " } }, "limit" : 10 }
{ "query" : { "bool" : { "must" : [ { "term" : { "test_text" : " document " } } ], "must_not" : [ { "range" : { "test_i64" : { "gt" : 2017 } } } ] } }, "limit" : 10 }
لتجربة أي من الاستعلامات المذكورة أعلاه، يمكنك استخدام المثال أعلاه
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
تجدر الإشارة أيضًا إلى أن الحد اختياري، حيث أن 10 هي القيمة الافتراضية. تم تضمينه هنا فقط من أجل الاكتمال.
cargo test
توشي شيبا إينو يبلغ من العمر ثلاث سنوات. إنه فتى طيب للغاية وهو التميمة الرسمية لهذا المشروع. يقوم Toshi شخصيًا بمراجعة جميع التعليمات البرمجية قبل الالتزام بها في هذا المستودع وهو ملتزم بقبول المساهمات عالية الجودة فقط من إنسانه. ومع ذلك، سيقبل المكافآت لتسهيل مراجعة التعليمات البرمجية.