{"title":"البحث النصي الكامل FTS5","slug":"fts5-search","category":"concepts","summary":"كيف يستخدم Synapse SQLite FTS5 للبحث النصي الكامل في الذاكرة بزمن أقل من مللي ثانية.","audience":["human","llm"],"tags":["concept","search","fts5","fulltext"],"difficulty":"advanced","updated":"2026-06-27","word_count":591,"read_minutes":3,"lang":"ar","translated":true,"requested_lang":"ar","content_markdown":"\n# البحث النصي الكامل FTS5\n\nيستخدم Synapse امتداد FTS5 (Full-Text Search 5) للبحث السريع والمرن في الذاكرة.\nتشرح هذه الصفحة كيف يعمل وكيفية استخدامه بفعالية.\n\n## ما هو FTS5؟\n\nFTS5 امتداد SQLite (متاح أيضًا في PostgreSQL عبر امتدادات) يُوفّر قدرات\nالبحث النصي الكامل. يقوم بـ:\n\n- فهرسة المحتوى النصي للبحث السريع بالكلمات المفتاحية\n- دعم المعاملات المنطقية (AND، OR، NOT)\n- دعم مطابقة العبارات مع علامات الاقتباس\n- دعم مطابقة البادئات مع `*`\n- ترتيب النتائج حسب الصلة\n\nيستخدم Synapse امتداد FTS5 لفهرسة جميع محتويات الذاكرة، مما يُمكّن البحث بزمن\nأقل من مللي ثانية عبر آلاف الذكريات.\n\n## كيف يستخدم Synapse FTS5\n\nعند تنفيذ `POST /memory`:\n\n1. يُخزَّن محتوى الذاكرة في جدول `memories`\n2. يُدرج المحتوى أيضًا في الجدول الافتراضي FTS5\n3. يقوم FTS5 تلقائيًا بتجزئة المحتوى وفهرسته\n\nعند تنفيذ `GET /memory/search?q=...`:\n\n1. يحلل Synapse الاستعلام باستخدام صياغة FTS5\n2. ينفذ `MATCH` مقابل فهرس FTS5\n3. يصفّي حسب `mind_id` (عزل المستأجر)\n4. يُرجع النتائج مرتّبة\n\n## صياغة الاستعلام\n\n### بحث بالكلمات المفتاحية البسيطة\n\n```\n?q=docker\n```\n\nيُرجع الذكريات التي تحتوي على \"docker\".\n\n### كلمات مفتاحية متعددة (AND ضمني)\n\n```\n?q=docker+swarm\n?q=docker%20swarm\n```\n\nيُرجع الذكريات التي تحتوي على \"docker\" AND \"swarm\" معًا.\n\n### مطابقة العبارات\n\n```\n?q=\"docker+swarm\"\n?q=%22docker%20swarm%22\n```\n\nيُرجع الذكريات التي تحتوي على العبارة الدقيقة \"docker swarm\".\n\n### مطابقة البادئات\n\n```\n?q=docker*\n```\n\nيُرجع الذكريات التي تحتوي على كلمات تبدأ بـ \"docker\" (مثل \"dockers\"،\n\"dockerfile\"، \"dockerize\").\n\n### OR المنطقية\n\n```\n?q=docker+OR+kubernetes\n```\n\nيُرجع الذكريات التي تحتوي على \"docker\" OR \"kubernetes\".\n\n### NOT المنطقية\n\n```\n?q=docker+-swarm\n?q=docker+NOT+swarm\n```\n\nيُرجع الذكريات التي تحتوي على \"docker\" وليس \"swarm\".\n\n### التجميع\n\n```\n?q=(docker+OR+kubernetes)+-test\n```\n\nيُرجع الذكريات التي تحتوي على \"docker\" أو \"kubernetes\"، لكن ليس \"test\".\n\n## أمثلة عملية\n\n### البحث عن ذكريات حول مشروع\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=synapse+deployment\"\n```\n\n### البحث عن عبارة دقيقة\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22\"\n```\n\n### استبعاد ذكريات الاختبار\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=production+-test\"\n```\n\n### البحث حسب التقنية\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n     \"https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql\"\n```\n\n## الترتيب\n\nيرتّب FTS5 النتائج حسب الصلة باستخدام خوارزمية BM25. العوامل:\n\n- تكرار المصطلح (كم مرة يظهر المصطلح)\n- معكوس تكرار المستند (المصطلحات النادرة تُرتّب أعلى)\n- طول المستند (المستندات الأقصر التي تحتوي على المصطلح تُرتّب أعلى)\n- وزن العمود (العنوان > المحتوى)\n\nتُرجع النتائج بترتيب الصلة (الأكثر صلة أولًا).\n\n## الأداء\n\n| العملية | زمن الاستجابة |\n|-----------|---------|\n| البحث في 100 ذاكرة | < 5 مللي ث |\n| البحث في 1,000 ذاكرة | < 10 مللي ث |\n| البحث في 10,000 ذاكرة | < 25 مللي ث |\n| البحث في 100,000 ذاكرة | < 100 مللي ث |\n\nFTS5 مُحسّن للغاية لأحمال العمل الكثيفة القراءة.\n\n## القيود\n\n### الاشتقاق\n\nFTS5 لا يقوم بالاشتقاق افتراضيًا. \"running\" و \"run\" مصطلحان مختلفان.\n\n**الحل البديل:** استخدم مطابقة البادئات: `?q=run*`\n\n### التسامح مع الأخطاء المطبعية\n\nFTS5 لا يدعم المطابقة الضبابية. خطأ مطبعي سيُرجع نتائج فارغة.\n\n**الحل البديل:** استخدم البحث الدلالي (`/memory/semantic-search`) للمطابقة\nالمفاهيمية.\n\n### كلمات الوقف\n\nالكلمات الشائعة (the، a، an، is) مفهرسة لكن قد لا تكون مفيدة للبحث.\nيتعامل FTS5 مع هذا تلقائيًا.\n\n## FTS5 مقابل البحث الدلالي\n\n| الجانب | FTS5 | البحث الدلالي |\n|--------|------|-----------------|\n| السرعة | أقل من مللي ثانية | 50-100 مللي ث |\n| المطابقة | كلمات مفتاحية دقيقة | مفاهيمية |\n| التسامح مع الأخطاء | لا شيء | بعض |\n| الاشتقاق | لا شيء | ضمني |\n| يتطلب تضمينات | لا | نعم |\n| الأفضل لـ | مصطلحات محددة | المفاهيم |\n\nاستخدم FTS5 عندما تعرف الكلمات المفتاحية. استخدم البحث الدلالي عندما تريد\n\"ذكريات حول X\" حيث يُوصف X بشكل مختلف.\n\n## أفضل الممارسات\n\n> [!TIP]\n> - **استخدم مصطلحات محددة** — \"docker swarm\" أفضل من \"container orchestration\"\n> - **اضبط العبارات بين علامات اقتباس** — `\"docker swarm\"` يضمن مطابقة العبارة\n> - **استخدم البادئات للاختلافات** — `deploy*` يلتقط \"deploy\" و \"deployment\" و \"deploying\"\n> - **استبعد الضوضاء** — `-test` يصفّي ذكريات الاختبار\n> - **اجمع مع الوسوم** — `?q=docker&tag=production` يضيّق النتائج\n\n## الخطوات التالية\n\n- [البحث الدلالي](/docs/concepts/semantic-search)\n- [Memory API](/docs/api/memory)\n- [أفضل ممارسات الذاكرة](/docs/guides/memory-best-practices)\n","content_html":"<h1>البحث النصي الكامل FTS5</h1>\n<p>يستخدم Synapse امتداد FTS5 (Full-Text Search 5) للبحث السريع والمرن في الذاكرة.\nتشرح هذه الصفحة كيف يعمل وكيفية استخدامه بفعالية.</p>\n<h2>ما هو FTS5؟</h2>\n<p>FTS5 امتداد SQLite (متاح أيضًا في PostgreSQL عبر امتدادات) يُوفّر قدرات\nالبحث النصي الكامل. يقوم بـ:</p>\n<ul>\n<li>فهرسة المحتوى النصي للبحث السريع بالكلمات المفتاحية</li>\n<li>دعم المعاملات المنطقية (AND، OR، NOT)</li>\n<li>دعم مطابقة العبارات مع علامات الاقتباس</li>\n<li>دعم مطابقة البادئات مع <code>*</code></li>\n<li>ترتيب النتائج حسب الصلة</li>\n</ul>\n<p>يستخدم Synapse امتداد FTS5 لفهرسة جميع محتويات الذاكرة، مما يُمكّن البحث بزمن\nأقل من مللي ثانية عبر آلاف الذكريات.</p>\n<h2>كيف يستخدم Synapse FTS5</h2>\n<p>عند تنفيذ <code>POST /memory</code>:</p>\n<ol>\n<li>يُخزَّن محتوى الذاكرة في جدول <code>memories</code></li>\n<li>يُدرج المحتوى أيضًا في الجدول الافتراضي FTS5</li>\n<li>يقوم FTS5 تلقائيًا بتجزئة المحتوى وفهرسته</li>\n</ol>\n<p>عند تنفيذ <code>GET /memory/search?q=...</code>:</p>\n<ol>\n<li>يحلل Synapse الاستعلام باستخدام صياغة FTS5</li>\n<li>ينفذ <code>MATCH</code> مقابل فهرس FTS5</li>\n<li>يصفّي حسب <code>mind_id</code> (عزل المستأجر)</li>\n<li>يُرجع النتائج مرتّبة</li>\n</ol>\n<h2>صياغة الاستعلام</h2>\n<h3>بحث بالكلمات المفتاحية البسيطة</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker</code></pre><p>يُرجع الذكريات التي تحتوي على &quot;docker&quot;.</p>\n<h3>كلمات مفتاحية متعددة (AND ضمني)</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+swarm\n?q=docker%20swarm</code></pre><p>يُرجع الذكريات التي تحتوي على &quot;docker&quot; AND &quot;swarm&quot; معًا.</p>\n<h3>مطابقة العبارات</h3>\n<pre><code class=\"hljs language-plaintext\">?q=&quot;docker+swarm&quot;\n?q=%22docker%20swarm%22</code></pre><p>يُرجع الذكريات التي تحتوي على العبارة الدقيقة &quot;docker swarm&quot;.</p>\n<h3>مطابقة البادئات</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker*</code></pre><p>يُرجع الذكريات التي تحتوي على كلمات تبدأ بـ &quot;docker&quot; (مثل &quot;dockers&quot;،\n&quot;dockerfile&quot;، &quot;dockerize&quot;).</p>\n<h3>OR المنطقية</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+OR+kubernetes</code></pre><p>يُرجع الذكريات التي تحتوي على &quot;docker&quot; OR &quot;kubernetes&quot;.</p>\n<h3>NOT المنطقية</h3>\n<pre><code class=\"hljs language-plaintext\">?q=docker+-swarm\n?q=docker+NOT+swarm</code></pre><p>يُرجع الذكريات التي تحتوي على &quot;docker&quot; وليس &quot;swarm&quot;.</p>\n<h3>التجميع</h3>\n<pre><code class=\"hljs language-plaintext\">?q=(docker+OR+kubernetes)+-test</code></pre><p>يُرجع الذكريات التي تحتوي على &quot;docker&quot; أو &quot;kubernetes&quot;، لكن ليس &quot;test&quot;.</p>\n<h2>أمثلة عملية</h2>\n<h3>البحث عن ذكريات حول مشروع</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=synapse+deployment&quot;</span></code></pre><h3>البحث عن عبارة دقيقة</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=%22docker+swarm%22&quot;</span></code></pre><h3>استبعاد ذكريات الاختبار</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=production+-test&quot;</span></code></pre><h3>البحث حسب التقنية</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n     <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone/memory/search?q=(postgres+OR+sqlite)+-mysql&quot;</span></code></pre><h2>الترتيب</h2>\n<p>يرتّب FTS5 النتائج حسب الصلة باستخدام خوارزمية BM25. العوامل:</p>\n<ul>\n<li>تكرار المصطلح (كم مرة يظهر المصطلح)</li>\n<li>معكوس تكرار المستند (المصطلحات النادرة تُرتّب أعلى)</li>\n<li>طول المستند (المستندات الأقصر التي تحتوي على المصطلح تُرتّب أعلى)</li>\n<li>وزن العمود (العنوان &gt; المحتوى)</li>\n</ul>\n<p>تُرجع النتائج بترتيب الصلة (الأكثر صلة أولًا).</p>\n<h2>الأداء</h2>\n<table>\n<thead>\n<tr>\n<th>العملية</th>\n<th>زمن الاستجابة</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>البحث في 100 ذاكرة</td>\n<td>&lt; 5 مللي ث</td>\n</tr>\n<tr>\n<td>البحث في 1,000 ذاكرة</td>\n<td>&lt; 10 مللي ث</td>\n</tr>\n<tr>\n<td>البحث في 10,000 ذاكرة</td>\n<td>&lt; 25 مللي ث</td>\n</tr>\n<tr>\n<td>البحث في 100,000 ذاكرة</td>\n<td>&lt; 100 مللي ث</td>\n</tr>\n</tbody></table>\n<p>FTS5 مُحسّن للغاية لأحمال العمل الكثيفة القراءة.</p>\n<h2>القيود</h2>\n<h3>الاشتقاق</h3>\n<p>FTS5 لا يقوم بالاشتقاق افتراضيًا. &quot;running&quot; و &quot;run&quot; مصطلحان مختلفان.</p>\n<p><strong>الحل البديل:</strong> استخدم مطابقة البادئات: <code>?q=run*</code></p>\n<h3>التسامح مع الأخطاء المطبعية</h3>\n<p>FTS5 لا يدعم المطابقة الضبابية. خطأ مطبعي سيُرجع نتائج فارغة.</p>\n<p><strong>الحل البديل:</strong> استخدم البحث الدلالي (<code>/memory/semantic-search</code>) للمطابقة\nالمفاهيمية.</p>\n<h3>كلمات الوقف</h3>\n<p>الكلمات الشائعة (the، a، an، is) مفهرسة لكن قد لا تكون مفيدة للبحث.\nيتعامل FTS5 مع هذا تلقائيًا.</p>\n<h2>FTS5 مقابل البحث الدلالي</h2>\n<table>\n<thead>\n<tr>\n<th>الجانب</th>\n<th>FTS5</th>\n<th>البحث الدلالي</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>السرعة</td>\n<td>أقل من مللي ثانية</td>\n<td>50-100 مللي ث</td>\n</tr>\n<tr>\n<td>المطابقة</td>\n<td>كلمات مفتاحية دقيقة</td>\n<td>مفاهيمية</td>\n</tr>\n<tr>\n<td>التسامح مع الأخطاء</td>\n<td>لا شيء</td>\n<td>بعض</td>\n</tr>\n<tr>\n<td>الاشتقاق</td>\n<td>لا شيء</td>\n<td>ضمني</td>\n</tr>\n<tr>\n<td>يتطلب تضمينات</td>\n<td>لا</td>\n<td>نعم</td>\n</tr>\n<tr>\n<td>الأفضل لـ</td>\n<td>مصطلحات محددة</td>\n<td>المفاهيم</td>\n</tr>\n</tbody></table>\n<p>استخدم FTS5 عندما تعرف الكلمات المفتاحية. استخدم البحث الدلالي عندما تريد\n&quot;ذكريات حول X&quot; حيث يُوصف X بشكل مختلف.</p>\n<h2>أفضل الممارسات</h2>\n<div class=\"callout callout-ok\"></div><h2>الخطوات التالية</h2>\n<ul>\n<li><a href=\"/docs/concepts/semantic-search\">البحث الدلالي</a></li>\n<li><a href=\"/docs/api/memory\">Memory API</a></li>\n<li><a href=\"/docs/guides/memory-best-practices\">أفضل ممارسات الذاكرة</a></li>\n</ul>\n","urls":{"html":"/docs/concepts/fts5-search","text":"/docs/concepts/fts5-search?format=text","json":"/docs/concepts/fts5-search?format=json","llm":"/docs/concepts/fts5-search?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}