# Telegram · البحث عن النص الكامل

Canonical page: https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/

ابحث عن الرسائل المحفوظة حسب أشكال الكلمات، والعبارات الدقيقة، والنطاقات، وأسماء المستخدمين @، مع عرض أفضل النتائج أولاً، مع ربط الفهرس بالسجل الموقّع.

[Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/)

[Documentation index](https://phishdestroy.github.io/TgWitness/ar/llms.txt)

ابحث عن الرسائل المحفوظة حسب أشكال الكلمات، والعبارات الدقيقة، والنطاقات، وأسماء المستخدمين @، مع عرض أفضل النتائج أولاً، مع ربط الفهرس بالسجل الموقّع.

[TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [التوثيق](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [التحقيق](https://phishdestroy.github.io/TgWitness/ar/docs/reference/investigation/)

![التحقيق](https://phishdestroy.github.io/TgWitness/assets/chapter-investigate.svg)

[تحليل الأرشيف](https://phishdestroy.github.io/TgWitness/ar/docs/reference/analysis/) · [التعرف الضوئي على الحروف (OCR) المحلي والنسخ الصوتي](https://phishdestroy.github.io/TgWitness/ar/docs/reference/media-analysis/) · [ويكي](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md)

**المعاينة.** في **«Journal**»، اختر **«أفضل تطابق · أشكال الكلمة»** بجوار حقل البحث. يتم ترتيب النتائج باستخدام خوارزمية BM25 وتتطابق مع الأشكال الأخرى لنفس الكلمة: يبحث *«перевод»* عن *«переводом*» *و«переводы*»، ويبحث *«transfer»* عن *«transfers*»، ويتم العثور على العبارة الصينية بدون مسافات. **خيار «الأحدث أولاً · النص الدقيق»** يحافظ على البحث السابق عن السلسلة الفرعية عبر السجل بأكمله.

الفهرس عبارة عن بيانات مشتقة. يتم إعادة بنائه من السجل الموقّع، ولا يتم توقيعه أبدًا ولا يدخل أبدًا في عملية التصدير. لا تتغير السجلات الأصلية.

**في هذه الصفحة**

- [صيغة البحث](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#search-syntax)
- [اللغات](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#languages)
- [موقع الفهرس](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#where-the-index-lives)
- [النتائج والمجلة الموقعة](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#results-and-the-signed-journal)
- [النص المعترف به](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#recognized-text)
- [الوصول](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#access)
- [اسأل الأرشيف وMCP](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#ask-the-archive-and-mcp)
- [التبعيات](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#dependencies)
- [معيار الأداء](https://phishdestroy.github.io/TgWitness/ar/docs/reference/search/#benchmark)

## صيغة البحث

| اكتب | النتائج |
| --- | --- |
| `перевод карта` | السجلات التي تحتوي على الكلمتين معًا، بأي صيغة كانت |
| `"переводом на карту"` | العبارة بالضبط، بهذا الترتيب |
| `бонус OR подарок` | أي من الكلمتين |
| `перевод -казино` | السجلات التي لا تحتوي على الكلمة المستبعدة |
| `example.com` | النطاق ونطاقاته الفرعية، بما في ذلك الروابط المخفية وعناوين URL الخاصة بالأزرار |
| `@username`, `t.me/username` | الإشارات والروابط الخاصة بالحساب، والرسائل التي أرسلها |
| `#tag` | الهاشتاج |
| `+79991234567`، وعنوان محفظة، وعنوان بريد إلكتروني | نفس القيمة في النص أو الروابط |
| `from:@username`, `from:123456` | الرسائل الواردة من هذا المرسل |
| `chat:-1001234567890` | محادثة واحدة؛ لا يمكنها إلا تقييد وصولك أنت |
| `id:42` | الإصدارات المحفوظة من الرسالة رقم 42 |
| `since:2026-01-01 until:2026-01-31` | فترة الملاحظة؛ التاريخ دون تحديد الوقت يشمل اليوم بأكمله |
| `kind:edited` | التعديلات فقط (`new`, `snapshot`, `edited`, `recovered`) |
| `source:ocr`, `source:transcription`, `source:all` | النص المعترف به بدلاً من الرسائل أو إلى جانبها |

يتم تجاهل حروف الجر والكلمات الوظيفية الأخرى عند وجود كلمات أخرى. يتم توحيد الحروف المتشابهة المختلطة داخل كلمة (مثل الحرف اللاتيني *«a»* داخل كلمة باللغة السيريلية)، والحروف ذات العرض الكامل والحروف الزخرفية في يونيكود، والأحرف غير المرئية.

## اللغات

يتم تحديد اللغة لكل سجل بناءً على النص والحروف الموجودة فيه:

| نص برمجي | المطابقة |
| --- | --- |
| الأبجدية السيريلية | المعجمات الروسية والأوكرانية باستخدام [pymorphy3](https://github.com/no-plagiarism/pymorphy3). في حالة عدم استخدام القاموس الأوكراني الاختياري، يتم استخدام أداة تحليل جذور الكلمات الأوكرانية الخفيفة |
| اللاتينية | مُجردة جذور الكلمات «Snowball» باللغة الإنجليزية؛ يتم تجاهل علامات التشكيل |
| الصينية، اليابانية، الكورية، التايلاندية، اللاوية، الخميرية، الميانمارية | أزواج الأحرف المتداخلة: يتم العثور على أي عبارة بدون مسافات. يتم تقسيم الاستعلامات الصينية إلى كلمات باستخدام jieba |
| نصوص برمجية أخرى | الكلمات بالضبط |

يتم توزيع القاموس الأوكراني (`pymorphy3-dicts-uk`) يُوزَّع بموجب ترخيص GPL-3.0، لذا فهو غير مُثبَّت افتراضيًّا. قم بتثبيته باستخدام `pip install "tgwitness[uk-dictionary]"`؛ حيث يكتشف الفهرس المحلل الجديد ويعيد بناء نفسه.

## مكان وجود الفهرس

| الوضع | التخزين | الاستخدام |
| --- | --- | --- |
| على القرص (الافتراضي) | `search/fulltext.sqlite3` في دليل مساحة العمل | أرشيفات كبيرة الحجم؛ لا تتأثر بإعادة التشغيل |
| في الذاكرة فقط | لا يوجد شيء على القرص؛ يتم إعادة بنائها عند كل بدء تشغيل | لا توجد نسخة مشتقة من نص الرسالة على القرص |
| إيقاف | بدون فهرس؛ **الأحدث أولاً · النص الدقيق** كما هو | عمليات التثبيت البسيطة |

يختار المسؤول الرئيسي الوضع من خلال **«المجلة» → «المرشحات» → «فهرس البحث»** لكل مساحة عمل. `TGWITNESS_FULLTEXT=disk|memory|off` يُعيّن الإعداد الافتراضي لمساحات العمل التي لم تحدد خيارًا خاصًا بها. يؤدي التبديل إلى «الذاكرة» أو «إيقاف التشغيل» إلى حذف الملف. يتمتع ملف الفهرس بنفس الحماية التي يتمتع بها السجل: فهو موجود في دليل البيانات الخاصة . وهو غير مشفر، ولا يشكل جزءًا من النسخ الاحتياطية أو النسخ خارج الموقع.

يتم فهرسة السجلات الجديدة في الخلفية في غضون ثوانٍ؛ كما أن عملية البحث تقوم بفهرسة السجلات المتراكمة القصيرة أولاً، بحيث يمكن العثور على السجل الذي تم حفظه منذ لحظات. يتم فهرسة السجل الموجود بعد التحديث دون تعطيل اللوحة؛ وحتى ذلك الحين، تغطي النتائج السجلات المفهرسة ويُظهر السجل التقدم المحرز. تبدأ **عملية إعادة بناء الفهرس** من جديد من السجل الأول.

```
python -m tgwitness index status --data-dir data/live
python -m tgwitness index rebuild --data-dir data/live --json
```

`rebuild` يتطلب إيقاف تشغيل اللوحة (وإلا يكون رمز الخروج 3). مع `--json`، يحتوي الإخراج القياسي على النتيجة فقط؛ بينما يذهب التقدم إلى خطأ قياسي.

## النتائج والسجل الموقّع

يخزن الفهرس الرقم التسلسلي وهاش آخر سجل في السجل الذي يغطيه ويقارنهما بالسجل عند فتحه. ويؤدي استبدال السجل أو استعادته أو تعديله إلى إعادة البناء. تبلغ كل استجابة عن هذا الموضع، ويتم قراءة كل نتيجة من السجل الموقّع حسب رقمها التسلسلي: يقرر الفهرس أي السجلات يجب عرضها وبأي ترتيب، دون أن يحدد محتواها أبدًا. يتم تطبيق الوصول إلى الدردشة على حقل الدردشة الخاص بالسجل نفسه، وليس على محتوى الفهرس.

## النص المعترف به

يظل التعرف الضوئي على الحروف (OCR) والنصوص في ملفاتها المشفرة. ولا يوجد فهرسها إلا في الذاكرة ويتم إعادة بنائه عند اكتمال مهمة التعرف. تظهر النتيجة في `media.saved` سجله، مصنفة على أنها «التعرف الآلي» مع ذكر المحرك والنموذج و مقتطف؛ ولا يتم عرضها أبدًا كنص مرسل عبر Telegram. ويستخدم نفس الفهرس في **«البحث عن النص المعترف به**»، والذي لا يزال يطابق أيضًا سلاسل فرعية عادية.

## الوصول

الوصول المحدود بالدردشة لا يعثر إلا على السجلات من دردشاتها، بما في ذلك النص المعترف به من مرفقاتها. `chat:` ولا يمكن للفلاتر الأخرى سوى تضييق نطاق تلك المجموعة. حالة الفهرس التي تظهر للوصول المحدود نطاقًا تستبعد إجماليات السجل. لا يمكن إلا للمسؤول الرئيسي تغيير الوضع أو إعادة بناء الفهرس.

## استفسر من الأرشيف وMCP

**اطلب من الأرشيف** استرداد مصادره من هذا الفهرس عند اكتماله: أفضل التطابقات عبر الدردشات المحددة، مع احتساب النص المحفوظ مرة واحدة. يتم إرسال ما يصل إلى 24 مصدرًا؛ ويتم قطع النصوص الطويلة حول موضع التطابق ووضع علامة عليها على أنها مقطوعة. الاستفسارات حول التغييرات الأخيرة، والإصدارات المحفوظة لرسالة واحدة، وعمليات البحث أثناء استمرار إنشاء الفهرس تستخدم طريقة الاسترجاع الزمني السابقة. تعرض المعاينة الطريقة التي تم استخدامها.

يمكن لعملاء MCP استدعاء `search_messages` من خلال `ranked=true` وإرسال رسائل باستخدام `next_offset`. لا تتلقى الاتصالات المحددة النطاق سوى محادثاتها الخاصة.

يغطي ترقيم الصفحات المرتبة نتائج 1,000 الأولى كحد أقصى، بغض النظر عن حجم الصفحة. قم بتضييق نطاق الاستعلام أو الدردشة أو الفترة لفحص المزيد من النتائج المطابقة. تعمل عمليات البحث التي ترتب النتائج من الأحدث إلى الأقدم على ترتيب الرسائل ونتائج التعرف الضوئي على الحروف (OCR) ونتائج النسخ قبل اختيار كل صفحة.

## التبعيات

| الحزمة | الترخيص | لماذا |
| --- | --- | --- |
| pymorphy3، pymorphy3-dicts-ru، DAWG2-Python | MIT | المصطلحات الروسية والأوكرانية؛ يتم تحميل القواميس محليًّا |
| snowballstemmer | بند BSD-3 | جذور الكلمات باللغة الإنجليزية، لغة Python الخالصة |
| jieba | MIT | تجزئة الاستعلامات الصينية، بلغة Python الخالصة (توزيع المصدر فقط) |
| pymorphy3-dicts-uk (اختياري) | GPL-3.0 | قاموس أوكراني كامل |

يلزم وجود SQLite FTS5 مع `unicode61` أداة التقطيع؛ وهو جزء من SQLite في الإصدارات الحالية من Python. وبدونه، يُبلغ البحث عن أفضل تطابق بأن الخدمة غير متوفرة.

## معيار الأداء

`python tools/bench_fulltext.py --messages 1000000 --work <empty directory>`تنشئ سجلاً موقّعًا حتميًّا يضم رسائل مختلطة باللغات الروسية والأوكرانية والإنجليزية والصينية واليابانية مع روابط ومعرفات في 200 محادثة، وتبني الفهرس وتقيس مدة عمليات البحث النموذجية (50 نتيجة، متوسط 7 عمليات).

تم القياس على نظام Windows 11، معالج Intel Core i9-13900K، ذاكرة وصول عشوائي (RAM) سعة 128 جيجابايت، Python 3.12.10، SQLite 3.49.1، البيانات مخزنة على محرك أقراص exFAT، أداة التحليل `fulltext-v1+pymorphy3-ru+light-uk+snowball-en`:

| قياس | النتيجة |
| --- | --- |
| سجل موقّع | 1,000,000 رسالة، 1.50 جيجابايت، تمت كتابتها في 19 دقيقة |
| إنشاء فهرس من السجل | 71 ثانية، حوالي 14,141 رسالة في الثانية |
| ملف الفهرس | 58 ميغابايت، 3.8% من السجل |
| البحث مباشرة بعد تسجيل سجل جديد | الوسيط 8 مللي ثانية، p95 9 مللي ثانية |
| البحث السابق عن سلسلة فرعية، نفس السجل | `перевод` 3.2 ثانية، `银行转账` 2.6 ثانية، `verify-account.example` 2.6 ثانية |

| بحث | مطابقة السجلات | أفضل تطابق، الوسيط | ص 95 | الأحدث أولاً، المتوسط |
| --- | --- | --- | --- | --- |
| الكلمات الشائعة وأشكالها: `перевод` | 134,403 | 82 مللي ثانية | 85 مللي ثانية | 7 مللي ثانية |
| كلمتان: `оплата карта` | 28,996 | 43 مللي ثانية | 43 مللي ثانية | 14 مللي ثانية |
| كلمة نادرة: `розыгрыш подарок` | 28,881 | 42 مللي ثانية | 47 مللي ثانية | 13 مللي ثانية |
| العبارة الدقيقة: `"переказ коштів на картку"` | لم يتم احتسابها | 35 مللي ثانية | 36 مللي ثانية | 6 مللي ثانية |
| نطاق مع نطاقات فرعية: `verify-account.example` | 12,435 | 17 مللي ثانية | 17 مللي ثانية | 3 مللي ثانية |
| @username: `@support_desk_bot` | 10,331 | 15 مللي ثانية | 16 مللي ثانية | 3 مللي ثانية |
| اللغة الصينية بدون مسافات: `银行转账` | 17,691 | 23 مللي ثانية | 24 مللي ثانية | 3 مللي ثانية |
| اليابانية: `リンク` | 16,603 | 23 مللي ثانية | 25 مللي ثانية | 3 مللي ثانية |
| الجذر الإنجليزي: `withdrawal` | 27,775 | 26 مللي ثانية | 26 مللي ثانية | 2 مللي ثانية |
| أو والاستثناء: `бонус OR подарок -казино` | 268,034 | 190 مللي ثانية | 193 مللي ثانية | 19 مللي ثانية |
| مرشح الدردشة: `chat:-1000000000007 перевод` | 652 | 9 مللي ثانية | 9 مللي ثانية | 6 مللي ثانية |
| مرشح الفترة: `since:2026-01-01 until:2026-01-31 выплата` | 115,732 | 155 مللي ثانية | 156 مللي ثانية | 81 مللي ثانية |

يتم فحص العبارة الدقيقة حرفيًا على النتائج المرشحة مرتبة حسب الترتيب حتى تمتلئ الصفحة، لذلك لا يتم احتساب مجموعها. يزداد عدد المرات مع عدد السجلات المطابقة؛ ويؤدي تضييق نطاق الدردشة أو الفترة الزمنية إلى تسريع عمليات البحث الواسعة. يتكرر في المجموعة النصية المركبة مفردات قليلة، لذا فإن الكلمات الشائعة تتطابق مع عدد أكبر بكثير من السجلات مقارنةً بالدردشات الحقيقية.
