جربه!
BlogSearch هي أداة تدوين تتيح محرك البحث دون أي خدمات خارجية.
هذا مثل DocSearch ولكن للمدونات.
من الناحية الفنية ، يعد BlogSearch محرك بحث كامل من جانب العميل ، وكامل النص لمواقع الويب الثابتة ، مدعومًا من SQLite المترجمة إلى Webassembly.
بحث بحت العميل
لا خادم للحفاظ عليه. لا تكلفة الخدمة.
سهل. تم تصميمه للمدونات ومواقع الويب الثابتة في الاعتبار.
يدعم أطر المدونة الشائعة:
جيكل
غاتسبي
هوغو
... وأي مواقع ويب ثابتة!
SQLITE-WASM: قم بتشغيل SQLITE على الويب ، باستخدام Webassembly. تم إنشاء هذا المشروع لتلبية احتياجات BlogSearch.
يتكون سير العمل من خطوتين: 1. يمكنك إنشاء ملف فهرس | |
1. بناء ملف فهرس | 2. تمكين البحث |
ملف الفهرس
ثم تقوم بنسخ الموقع | يجب أن تقوم صفحة الويب الخاصة بك بتحميل محرك البحث. لا يوجد سوى محرك واحد متاح:
قم بتحميل المحرك باستخدام علامة <script> أو في ملف JavaScript. بمجرد أن يجلب المحرك ملف |
في جميع أنحاء المشروع ، غالبًا ما يتم خلط مصطلحات "الفهرس" و "قاعدة البيانات" ، ولكنها تعني نفس ملف SQLite .db.wasm في معظم الحالة. |
Jekyll (Jekyll-BlogSearch)
غاتسبي (Gatsby-Plugin-BlogSearch)
Hugo (blogsearch-crawler)
زاحف عام (المدونة البحث)
يجب على المستخدمين تكوين أداة إنشاء الفهرس لجمع قيمة الحقول من أجل العمل على محرك البحث بشكل صحيح.
يجب أن تقوم أداة بناء الفهرس بجمع الحقول الافتراضية التالية لكل منشورات:
title : عنوان المنشور.
body : محتوى المنشور.
url : رابط عنوان URL إلى المنشور.
categories : قائمة الفئات المفصولة بالفاصلة ( , ) التي ينتمي إليها المنشور.
tags : قائمة بالعلامات المفصولة بالفاصلة ( , ).
يمكن للمستخدمين تكوين كل الحقول باستخدام الخصائص التالية:
| مثال | نتيجة |
|---|---|
| |
{
...other field options...
categories: {
+ disabled: true,
},
} | |
في المثال التالي ، انخفض حجم ملف الفهرس | |
{
...other field options...
body: {
+ hasContent: false,
},
} | |
| |
{
...other field options...
url: {
+ indexed: false,
},
} | |
قد تحتوي أداة إنشاء الفهرس الخاصة بك على خيارات خاصة بالأدوات للحقل (EG parser Option لـ Blogsearch-Crawler). راجع وثائق أداة إنشاء الفهرس للحصول على التفاصيل. |
< link rel =" stylesheet " href =" https://cdn.jsdelivr.net/npm/[email protected]/dist/basic.css " />
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/blogsearch.umd.js " > </ script >
< script src =" https://cdn.jsdelivr.net/npm/[email protected]/dist/worker.umd.js " > </ script >
< input id =" blogsearch_input_element " type =" search " placeholder =" Search Text " class =" form-control " />
< script >
blogsearch ( {
dbPath : 'your_index_file.db.wasm' ,
inputSelector : '#blogsearch_input_element' ,
} ) ;
</ script >لمزيد من التفاصيل والخيارات ، انتقل إلى الدليل الفرعي لـ BlogSearch.
محرك البحث هو SQLite بشكل أساسي مع امتداد FTS5 ، تم تجميعه إلى Webassembly. يوفر SQLite FTS5 خوارزمية تصنيف BM25 المدمجة لوظيفة البحث. نظرًا لأن SQLite هو محرك قاعدة البيانات الأكثر حماية ، يمكنك فتح أي ملفات قاعدة بيانات SQLite على الويب أيضًا! بفضل SQLite ، يمكننا بسهولة كتابة المكونات الإضافية لـ BlogSearch مع عدد قليل من استعلامات SQL بلغات برمجة مختلفة.
.db.wasm ينصح فهرس تمديد الملف؟ إنه ليس ملفًا ثنائيًا على شبكة الإنترنت. لماذا لا فقط .db ؟ حاولت أن أجعلها .db ولكن هناك مشكلة كبيرة: ملف الفهرس ليس مضغوطًا GZIP بواسطة خادم الويب. عادةً ما تخدم خدمات الويب الشائعة (خاصة صفحات GitHub) ملف .db application/octet-stream ولا تقم بضغط الملف. من خلال الكذب بأنه ملف ثنائي ويب .wasm ، يتعرف الخوادم على أنه application/wasm وشحنه مضغوطًا.
الضغط مهم لأنه يقلل بشكل كبير من حجم الملف. رأيت أن الحجم ينخفض إلى 1/3.
لتجنب مشكلة "ولكنها تعمل على الجهاز الخاص بي" ، يوصى بشدة باستخدام Docker لبناء المهام.
على الرغم من أن هذا المستودع هو monorepo حيث يحتوي كل مشاريع فرعية على نصوص بناء خاصة ، يمكنك تشغيل المهام بسهولة في دليل الجذر.
| إذا كنت ترغب في إنشاء مشروع فرعي معين فقط ، فانتقل إلى أوامر الغزل وتشغيل الغزل. |
الأدوات المطلوبة هي ما يلي:
ينصح GNU (v4.2 أو أعلى ، يتم تحذيره لمستخدمي MacOS!)
عامل ميناء
Docker-corm
غزل
على الرغم من أنه يتم استخدام MakeFile لمشروع JS لأنه أكثر تكوينًا ويدعم البناء بالتوازي.
للحصول على إصدارات NodeJS محددة المستخدمة في المشروع ، يرجى إلقاء نظرة على Dockerfile.
# Or yarn install, without docker
make install-in-docker # Or yarn install, without docker
make lib-in-dockermake start-in-docker
# You can access the demo page via 0.0.0.0:9000 # Or make test, without docker
make test-in-docker
# Run it in parallel
make test-in-docker -j4 --output-sync=target| هذا سيستغرق الكثير من الوقت! (~ 30 mintues) |
# It is highly recommended to use docker here
make examples-in-docker && make demo-in-docker| هذا سيستغرق الكثير من الوقت! (~ 30 mintues) |
# Or make all, without docker
make all-in-docker
# Or
# Parallel builds. This reduces the build time almost an half on my machine.
make all-in-docker -j4 --output-sync=targetmake clean
# Then run any commands above make bash-in-dockerهذا المشروع مستوحى من DocSearch ولديه إعادة تنفيذ في TypeScript.
بخلاف ذلك ، فإن المشروع هو ترخيص معهد ماساتشوستس للتكنولوجيا. انظر الترخيص