تنفيذ محرك بحث بسيط.
أغراض الدراسة، في الغالب لفهم تفاصيل التنفيذ لكيفية إنشاء محركات البحث، ومقايضات الأداء والهيكل.
تتمثل الفكرة في إنشاء تطبيق متماثل من واجهة المستخدم إلى نظام قاعدة البيانات.
يمكن نشر التطبيق باستخدام عامل الإرساء أو الملف الثنائي الذي تم إصداره في جيثب.
./searchzin -c <path-to-config>.yml
بعد ذلك يمكنك البحث في http://localhost:8080
لرؤية صفحة البحث.
يمكن إجراء التكوين إما عن طريق ملف التكوين الموجود افتراضيًا في /etc/searchzin/config.yml
، أو عن طريق توفير مفاتيح التكوين في النموذج -C key=value
، ويتجاوز النموذج الثاني الأول.
افتراضيات التكوين:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
كل هيكل المشروع مصنوع في جولانج، باستخدام إطار عمل gin
.
تتم إدارة التبعيات باستخدام dep
.
تتم إدارة معظم سلسلة أدوات المشروع بواسطة Makefile
، والأهداف المهمة هي:
install
: تثبيت التبعيات المطلوبة وخطافات gitreadme
: يقوم بتنفيذ تضمين الملف README.md
lint
: يقوم بإجراء فحص وتنسيق التعليمات البرمجيةtest
: حسنًا، قم بتجميع اختبارات الوحدة وتشغيلهاbuild
: إنشاء مجلد linux
قابل للتوزيع في dist
run
: يقوم بتشغيل الكود باستخدام go run
run-dev
: يقوم بإنشاء حاوية عامل إرساء وتشغيلهاrelease
: إنشاء صورة عامل ميناء الإصدارpublish
: ينشر صورة عامل الإرساء على dockerhub باستخدام محتويات ملف VERSION
كإصدارpublish-latest
: ينشر صورة عامل الإرساء على dockerhub latest
علامةwatch
: يقوم بتنفيذ lint
test
تعديل الملفfunc-test
: يقوم بإجراء اختبارات وظيفية داخل مجلد features
هناك 6 مكونات رئيسية لمحرك البحث هذا:
ولكل مكون مسؤولية واضحة في النظام، وتعمل جميعها معًا للرد على الاستفسارات وطلبات فهرسة المستندات.
إنها مسؤولة عن تخزين وإعطاء معرفات للمستندات التي تم إنشاؤها حديثًا. القيود هي:
id
id
بدون أي تصادمات من أجل الثباتssd
أو hdd
يخزن فهرسًا عكسيًا لـ "المصطلحات" والمستندات
terms
لتوثيق علاقات المجموعةkey
للاستعلامات التي تحتوي على تقريب الكلمات الرئيسيةبالنظر إلى مستند جديد يفهمه ويحفظه في قاعدة بيانات الفهرس وقاعدة بيانات المستندات.
يوزع مدخلات المستخدم ويحولها إلى خطة استعلام باستخدام بنية بيانات تشبه الشجرة.
lucene
نظرًا لشجرة الاستعلام، يتم تحسينها مع العلم بالقيود والبيئة التي سيتم تنفيذها فيها.
بعد الحصول على خطة منظمة، يقوم الاستعلام باسترداد البيانات الفعالة من قاعدة بيانات index
، ويتم تنفيذ هذه الخطوة من قبل المنفذ.
تعتمد لغة الاستعلام هذه بشكل كبير على لغة لوسين، لتبسيط التصميم وفهم المقايضات التي تم إجراؤها.
سيكون سيناريو الاختبار الحالي الذي سيتم استخدامه هو فهرسة ملفات البودكاست حسب الاسم والمحتوى والعلامات.
يمكن العثور على الاستخدام الأساسي في searchzin-example
.
Searchzin متاح بموجب ترخيص MIT.