Skip to main content

البحث النصي الكامل FTS5

كيف يستخدم Synapse SQLite FTS5 للبحث النصي الكامل في الذاكرة بزمن أقل من مللي ثانية.


البحث النصي الكامل FTS5

يستخدم Synapse امتداد FTS5 (Full-Text Search 5) للبحث السريع والمرن في الذاكرة. تشرح هذه الصفحة كيف يعمل وكيفية استخدامه بفعالية.

ما هو FTS5؟

FTS5 امتداد SQLite (متاح أيضًا في PostgreSQL عبر امتدادات) يُوفّر قدرات البحث النصي الكامل. يقوم بـ:

  • فهرسة المحتوى النصي للبحث السريع بالكلمات المفتاحية
  • دعم المعاملات المنطقية (AND، OR، NOT)
  • دعم مطابقة العبارات مع علامات الاقتباس
  • دعم مطابقة البادئات مع *
  • ترتيب النتائج حسب الصلة

يستخدم Synapse امتداد FTS5 لفهرسة جميع محتويات الذاكرة، مما يُمكّن البحث بزمن أقل من مللي ثانية عبر آلاف الذكريات.

كيف يستخدم Synapse FTS5

عند تنفيذ POST /memory:

  1. يُخزَّن محتوى الذاكرة في جدول memories
  2. يُدرج المحتوى أيضًا في الجدول الافتراضي FTS5
  3. يقوم FTS5 تلقائيًا بتجزئة المحتوى وفهرسته

عند تنفيذ GET /memory/search?q=...:

  1. يحلل Synapse الاستعلام باستخدام صياغة FTS5
  2. ينفذ MATCH مقابل فهرس FTS5
  3. يصفّي حسب mind_id (عزل المستأجر)
  4. يُرجع النتائج مرتّبة

صياغة الاستعلام

بحث بالكلمات المفتاحية البسيطة

?q=docker

يُرجع الذكريات التي تحتوي على "docker".

كلمات مفتاحية متعددة (AND ضمني)

?q=docker+swarm
?q=docker%20swarm

يُرجع الذكريات التي تحتوي على "docker" AND "swarm" معًا.

مطابقة العبارات

?q="docker+swarm"
?q=%22docker%20swarm%22

يُرجع الذكريات التي تحتوي على العبارة الدقيقة "docker swarm".

مطابقة البادئات

?q=docker*

يُرجع الذكريات التي تحتوي على كلمات تبدأ بـ "docker" (مثل "dockers"، "dockerfile"، "dockerize").

OR المنطقية

?q=docker+OR+kubernetes

يُرجع الذكريات التي تحتوي على "docker" OR "kubernetes".

NOT المنطقية

?q=docker+-swarm
?q=docker+NOT+swarm

يُرجع الذكريات التي تحتوي على "docker" وليس "swarm".

التجميع

?q=(docker+OR+kubernetes)+-test

يُرجع الذكريات التي تحتوي على "docker" أو "kubernetes"، لكن ليس "test".

أمثلة عملية

البحث عن ذكريات حول مشروع

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=synapse+deployment"

البحث عن عبارة دقيقة

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22"

استبعاد ذكريات الاختبار

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=production+-test"

البحث حسب التقنية

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql"

الترتيب

يرتّب FTS5 النتائج حسب الصلة باستخدام خوارزمية BM25. العوامل:

  • تكرار المصطلح (كم مرة يظهر المصطلح)
  • معكوس تكرار المستند (المصطلحات النادرة تُرتّب أعلى)
  • طول المستند (المستندات الأقصر التي تحتوي على المصطلح تُرتّب أعلى)
  • وزن العمود (العنوان > المحتوى)

تُرجع النتائج بترتيب الصلة (الأكثر صلة أولًا).

الأداء

العملية زمن الاستجابة
البحث في 100 ذاكرة < 5 مللي ث
البحث في 1,000 ذاكرة < 10 مللي ث
البحث في 10,000 ذاكرة < 25 مللي ث
البحث في 100,000 ذاكرة < 100 مللي ث

FTS5 مُحسّن للغاية لأحمال العمل الكثيفة القراءة.

القيود

الاشتقاق

FTS5 لا يقوم بالاشتقاق افتراضيًا. "running" و "run" مصطلحان مختلفان.

الحل البديل: استخدم مطابقة البادئات: ?q=run*

التسامح مع الأخطاء المطبعية

FTS5 لا يدعم المطابقة الضبابية. خطأ مطبعي سيُرجع نتائج فارغة.

الحل البديل: استخدم البحث الدلالي (/memory/semantic-search) للمطابقة المفاهيمية.

كلمات الوقف

الكلمات الشائعة (the، a، an، is) مفهرسة لكن قد لا تكون مفيدة للبحث. يتعامل FTS5 مع هذا تلقائيًا.

FTS5 مقابل البحث الدلالي

الجانب FTS5 البحث الدلالي
السرعة أقل من مللي ثانية 50-100 مللي ث
المطابقة كلمات مفتاحية دقيقة مفاهيمية
التسامح مع الأخطاء لا شيء بعض
الاشتقاق لا شيء ضمني
يتطلب تضمينات لا نعم
الأفضل لـ مصطلحات محددة المفاهيم

استخدم FTS5 عندما تعرف الكلمات المفتاحية. استخدم البحث الدلالي عندما تريد "ذكريات حول X" حيث يُوصف X بشكل مختلف.

أفضل الممارسات

الخطوات التالية