IFelx
IFelx Search Engine · v2.5

سجل التحديثات

تاريخ تطور IFelx Search Engine — محرك البحث العربي المستقل

v2.5أحدث

دقة البحث، دعم العربية، زحف أعمق، وإغلاق ثغرات الحماية

  • توحيد الكتابة العربية — أصبحت الهمزات (أ إ آ ؤ ئ) والتاء المربوطة والألف المقصورة والتشكيل والتطويل والأرقام الهندية تُوحَّد قبل الفهرسة والبحث، وعلامات الترقيم العربية (، ؛ ؟) لم تعد تلتصق بالكلمات. البحث عن «مستشفي» يجد «مستشفى» و«مسئول» يجد «مسؤول».
  • بدون إعادة فهرسة — كل كلمة في الاستعلام تُبحث بصيغتها الجديدة وبصيغة الفهرس القديم معاً، فالصفحات المفهرسة قبل هذا الإصدار تظهر في النتائج مباشرة.
  • ترتيب أدق — النتيجة تجمع BM25 مع نسبة كلمات الاستعلام الموجودة في الصفحة، وتطابق العنوان، وتطابق اسم الموقع، و PageRank بمقياس لوغاريتمي، مع حد نتيجتين لكل موقع حتى لا تملأ المواقع ذات النطاقات الفرعية الكثيرة الصفحة.
  • بحث أسرع في الكلمات الشائعة — الكلمة الموجودة في مئات آلاف الصفحات لم تعد تُحمَّل كاملة؛ تُقرأ فقط للصفحات المرشحة من الكلمات الأندر، مع حذف كلمات الربط (the, في, من ...).
  • PageRank يبقى بعد إعادة الزحف — تحديث الصفحة لم يعد يصفّر ترتيبها، و PageRank يُحسب الآن على القاعدة الأساسية وكل قواعد الأجهزة الثانوية معاً، مع توحيد http و https و www.
  • كاش لا يتقادم — كل عنصر في كاش LMDB له مدة صلاحية، فالصفحات الجديدة تظهر خلال دقائق بدل أن تبقى مخفية حتى إعادة التشغيل، ويُنظَّف الكاش دورياً.
  • اقتراح تلقائي وتصحيح إملائي — الاقتراحات كلمات حقيقية من عناوين الصفحات بدل جذور مثل «univers»، وتكمل الكلمة الأخيرة في الاستعلام، و«هل تقصد» يصحح كل كلمة على حدة.
  • زحف داخل المواقع — مفهرسات وضع الصفحات أصبحت تدخل الصفحات الداخلية فعلاً (كانت تتوقف عند الصفحة الأولى)، بحدود للعمق ولعدد الصفحات لكل موقع، مع احترام كامل لـ robots.txt (Allow و * و $ و Crawl-delay) ولوسوم noindex و nofollow.
  • فلتر محتوى بالكلمات الكاملة — لم يعد يحجب مواقع مثل Sussex و Essex و hackathon بسبب جزء من الكلمة، وحد لعدد النطاقات الفرعية لكل موقع ضد مزارع الصفحات المكررة.
  • حماية — حد الطلبات يعتمد على عنوان الزائر الحقيقي ولا يمكن تجاوزه بترويسة مزيفة، تقييم واحد لكل زائر ولكل رابط مع حد يومي، الزيارات تُحسب مرة كل ساعة، مقارنة مفتاح الإدارة بزمن ثابت مع قفل بعد المحاولات الفاشلة، و HSTS فقط على HTTPS.
  • حماية القرص والذاكرة — المفهرس يتوقف مؤقتاً عندما تقل المساحة الحرة أو الذاكرة المتاحة، وتُحذف الملفات المؤقتة التي كانت تتراكم عند امتلاء القرص.
  • sitemap صحيح — يحتوي صفحات IFelx فقط بدل روابط مواقع أخرى كانت تجعل محركات البحث ترفضه.
  • فهرس أخف — حذف فهرس idx_token المكرر (نفس بداية المفتاح الأساسي و idx_inv_cover) فتحررت 1.4GB داخل قاعدة البيانات وأصبحت الكتابة أسرع.
  • قائمة الاقتراحات فوق البطاقات — قائمة الاقتراح التلقائي في الصفحة الرئيسية كانت تختفي خلف بطاقات المواقع المقترحة، وأصبحت تظهر فوقها.
v2.4

تجميل الواجهة وجعلها مرنة بالكامل مع الحفاظ على الهوية البصرية

  • نظام تصميم موحّد — كل الألوان والزوايا والمسافات أصبحت متغيرات في style.css مع الإبقاء على هوية IFelx نفسها: الخلفية #090909 والأزرق #155AB6 وخطوط Inter و Cairo والأشكال الدائرية.
  • واجهة مرنة على كل الشاشات — أحجام الخطوط والشعار والبطاقات تتدرج تلقائياً من الهاتف الصغير حتى الشاشة العريضة، مع دعم حواف الشاشات الحديثة (safe-area) وارتفاع الشاشة الفعلي على الهاتف.
  • تبديل لغة حقيقي — زر AR/EN يترجم كل عناصر الواجهة ويقلب الاتجاه بشكل صحيح في كل الصفحات بدل تغيير النص الظاهر فقط، ويُطبَّق قبل رسم الصفحة فلا يحدث وميض.
  • صفحة نتائج أنيقة — بطاقات أنظف تعرض الدومين ومسار الرابط، هيكل تحميل (skeleton) بدل الدوّار، اقتراح تلقائي في شريط البحث العلوي، وتنقّل للخلف والأمام بين عمليات البحث دون إعادة تحميل.
  • قائمة خيارات لكل نتيجة — زر ⋯ يفتح القائمة على الهاتف واللمس، والقائمة نفسها أصبحت: فتح في تبويب جديد، نسخ الرابط، تقييم 👍/👎، ومسح من السجل.
  • سجل تصفح منظّم — الزيارات مقسّمة حسب اليوم (اليوم، أمس، ...) مع عداد وبحث فوري وحذف لكل عنصر، وما زال محفوظاً على جهازك فقط.
  • الصفحة الرئيسية — روابط السجل وحول IFelx واللغة في شريط علوي مرتب بدل الأزرار العائمة التي كانت تتداخل على الهاتف، وإحصاءات الفهرس في بطاقات صغيرة مع مؤشر حي لحالة الزحف.
  • كود أخف وأسهل صيانة — ملف app.js واحد يجمع الكود المشترك (اللغة، السجل، القائمة، الاقتراح التلقائي) بدل تكراره داخل كل صفحة، وحذف أنماط طبقة الذكاء الاصطناعي المحذوفة منذ v2.1.
  • وصول أفضل — تنقّل كامل بلوحة المفاتيح، اختصار / للانتقال إلى مربع البحث، حدود تركيز واضحة، واحترام إعداد تقليل الحركة في النظام.
  • تنظيف مجلد التثبيت — نقل النسخة المقسّمة إلى جذر المشروع وحذف بقايا الإصدارات السابقة، وتحديث Service Worker ليحذف الكاش القديم ويخزّن ملفات الواجهة الجديدة.
v2.3

فصل محرك البحث عن المفهرس وربط المفهرسات الثانوية

  • فصل كامل بين العمليتين — أصبح IFelx Search Engine و IFelx Crawler Engine عمليتين مستقلتين تماماً بمجلدين منفصلين فلا يسبب ضغط الفهرسة أي عنق زجاجة على مسار البحث.
  • محرك البحث للقراءة فقط — لا يفتح أي قاعدة بيانات للكتابة ولا يأخذ قفل كتابة أبداً، والمفهرس هو المالك الوحيد لكل القواعد داخل مجلد data الموحّد.
  • التقييمات والزيارات في قواعد مستقلة — يسجلها محرك البحث في قواعده الخاصة ويطبّقها المفهرس على بذوره لاحقاً بدل الكتابة المشتركة.
  • قراءة موحدة لقواعد البيانات — البحث يقرأ قاعدة SQLite الأساسية مع قواعد الأجهزة الثانوية معاً عبر db_registry بقراءة للقراءة فقط ودمج نتائج BM25 عليها كلها.
  • وضع Secondary للمفهرس — جهاز آخر يشغل كود المفهرس فقط وينشئ ملف مفتاح، وعند نقل الملف إلى مجلد api_keys في السيرفر الأساسي يتم التعرف عليه والارتباط تلقائياً.
  • انتظار قبل الارتباط — المفهرس الثانوي يبقى خاملاً ولا يفهرس أي شيء حتى يقبل السيرفر الأساسي مفتاحه.
  • منع تكرار الفهرسة بدون ضغط — تقسيم نطاقات المواقع على شكل حصص hash مستقلة لكل جهاز مع مرشح Bloom للنطاقات المفهرسة مسبقاً يتم تحميله مرة واحدة كل فترة بدل سؤال السيرفر عن كل رابط.
  • إرسال دفعي للنتائج — الجهاز الثانوي يرسل المستندات المنتهية على دفعات مضغوطة إلى shard خاص به داخل السيرفر الأساسي فيقرأه محرك البحث مباشرة.
v2.2

إعادة تسمية المشروع إلى IFelx Search Engine + طبقة كاش LMDB

  • إعادة تسمية كاملة — تحوّل المشروع من WEX Engine إلى IFelx Search Engine (IFSE) مع توحيد الهوية عبر كل الكود والواجهة.
  • طبقة كاش LMDB اختيارية — طبقة تخزين سريعة بجانب SQLite يتحكم بها Cache Manager، تُشغَّل عند ارتفاع الضغط لتقليل قراءات قاعدة البيانات الأساسية، وتبقى SQLite دائماً المصدر الرئيسي للبيانات.
  • about.html أصبحت تعتمد على style.css الموحّد بدل الأنماط المضمّنة.
v2.1

إزالة طبقة الذكاء الاصطناعي + إصلاح البحث + اقتراح تلقائي

  • حذف jowa-ai-search بالكامل — كانت طبقة إعادة الترتيب زائدة عن الحاجة ومكررة لعمل BM25، حُذفت من الكود والواجهة ومن مراقبة ضغط السيرفر.
  • تبسيط خوارزمية البحث — إزالة طبقات المكافآت والتعزيز اللغوي الزائدة التي كانت تُشوّش الترتيب، مع الإبقاء على BM25 وPageRank فقط.
  • إصلاح الفهرس المعكوس — أداة rebuild_index.py جديدة لإعادة بناء الفهرس من الوثائق المخزنة سابقاً وإصلاح تطابق الرموز مع المحلل الحالي.
  • سكربت توافق قاعدة البيانات — fix_db.py لمواءمة قواعد البيانات القديمة مع بنية الكود الحالي.
  • اقتراح "هل تقصد" — عند ضعف نتائج البحث يقترح المحرك أقرب اسم دومين مطابق تلقائياً.
v2.0

إعادة كتابة كاملة للمحرك + جولة ذكاء اصطناعي جديدة (jowa-ai-search)

  • محرك الزحف غير متزامن بالكامل عبر aiohttp/asyncio بدل الـ threads التقليدية، مع cache داخلي للدومينات المزارة والمفهرسة لتقليل ضغط قاعدة البيانات.
  • BM25 حقيقي (k1=1.5, b=0.75) مع تطبيع طول الوثيقة بدل TF-IDF البسيط، ودعم أعمق للكشف بين العربية والإنجليزية مع boost لغوي عند تطابق لغة السؤال مع لغة الوثيقة.
  • jowa-ai-search — طبقة إعادة ترتيب بالذكاء الاصطناعي تعتمد على MiniLM للتمثيل الرقمي للنصوص و DQN يتعلم من تقييمات المستخدم (👍/👎) مباشرة أثناء التشغيل دون الحاجة لسكربت تدريب منفصل.
  • مراقبة ضغط السيرفر — تعطيل تلقائي لميزة الذكاء الاصطناعي عند ارتفاع استهلاك المعالج أو الذاكرة لحماية استقرار الخدمة.
  • إصلاحات استقرار جوهرية — حل مشكلة تضارب SQLite بين الخيوط المتعددة، ونقل حساب PageRank إلى اتصال مشترك، وتصحيح دقة التغذية الراجعة للذكاء الاصطناعي.
  • robots.txt و sitemap.xml ديناميكيان يعتمدان على رأس الطلب لتحديد الدومين الفعلي مع رجوع افتراضي لدومين Tailscale.
  • واجهة محدثة — صفحة سجل تصفح محلي، تبديل لغة عربي/إنجليزي، مؤشرات تحميل في كل الصفحات، وتوحيد كل الأنماط داخل ملف واحد.
v1.9

40 مفهرس + تقييم المواقع + سجل تصفح محلي

  • 40 مفهرساً (بدل 20) وإعادة تشغيل الفهرسة التلقائية تلقائياً عند بدء السيرفر.
  • PageRank أسرع — إعادة كتابة الخوارزمية من O(n×edges) إلى O(edges) عبر reverse-link map، مع فاصل إعادة الحساب يتوسّع تلقائياً مع نمو الفهرس، وقراءة الإعدادات من config.json.
  • إدارة موارد أعمق — Semaphore عام يحدّ عمليات الجلب المتزامنة عبر كل المفهرسين معاً حسب worker_threads، وحذف خيار "فترة الاستراحة" لاستجابة أسرع عند نفاد الـ seeds.
v1.8

الفهرسة المحلية

  • الفهرسة أصبحت لا تتوسع تلقائياً — يتم إنتاج الفهرس محلياً عبر indexer_local.py بناءً على الفهرسة التي تفهرس في مكان آخر.
v1.7

نظام الـ 20 مفهرس + الأمان الكامل

  • 20 مفهرس مستقل يتحكم بهم ملف crawler.json — كل مفهرس له وضع (page أو domain) وعدد threads وأولوية مستقلة.
  • Seeds ديناميكية — قاعدة بيانات ifse_seeds.db تبدأ بـ 183 seed مصنّفة في 17 فئة.
  • حماية SSRF في addweb — كل URL يُضاف يُفحص ضد Private IPs و AWS metadata.
  • تسريع الفهرسة — Batch size 80 وثيقة، PageRank في thread منفصل، HTTP Session Pool.
v1.6

إضافة رقم إصدار

  • index.html - search.html إضافة رقم الإصدار.
v1.5

تحسينات الأمان وإعادة هيكلة الـ Crawler

  • secure_store.py — تشفير addweb.json بـ XSalsa20-Poly1305 + Argon2id لاشتقاق المفتاح (64MB memory cost). أي تعديل يدوي على الملف يُكتشف فوراً ويُغلق الوصول.
  • config_loader.py مع Hot-reload — يقرأ config.json ويُعيد تحميله تلقائياً عند تغييره دون إعادة تشغيل.
  • CSP headers + HSTS + X-Frame-Options — حماية كاملة على مستوى HTTP headers.
التحديثات السابقة
v1.4

TF-IDF + PageRank + Batch Indexer

  • indexer.py — نظام TF-IDF مع PageRank يعمل كل 30 وثيقة.
  • كتابة batch في SQLite (30 وثيقة/transaction) بدل كتابة فردية — أسرع بـ 10×.
  • دعم العربية في الـ tokenizer — [؀-ۿ]+ مع الإنجليزية.
  • WAL mode + PRAGMA cache_size=32MB لتحسين الأداء تحت التوازي.
v1.3

Domain-Only Mode + Resource Monitor

  • Domain-only mode — فهرسة الصفحة الرئيسية لكل دومين فقط بدل زحف كامل، مناسب للسيرفرات المحدودة.
  • Resource monitor يتوقف مؤقتاً عند تجاوز حد RAM أو CPU المضبوط في config.
  • ThreadPoolExecutor مع batch processing — معالجة متوازية للدومينات.
v1.2

واجهة IFelx + Seeds الأولية

  • تصميم الواجهة الأساسية — شعار IFelx، مربع البحث، بطاقات الاقتراحات.
  • قائمة Seeds الأولية — أكثر من 100 موقع عربي وإنجليزي.
  • إحصائيات مباشرة في الـ footer تتحدث كل 30 ثانية.
v1.0

الإصدار الأول — الهيكل الأساسي

  • كان متصفح ثابت في github pages — ifse-br.github.io
  • بدون crawler.