TgWitness / दस्तावेज़ीकरण

क्या परीक्षण किया गया है →

संदर्भ / संग्रह और एकीकरण

Telegram · पूर्ण-पाठ खोज

हस्ताक्षरित जर्नल से जुड़े सूचकांक के साथ, शब्द रूपों, सटीक वाक्यांशों, डोमेनों और @usernames के आधार पर सहेजे गए संदेश खोजें, सर्वोत्तम मिलान पहले।

टीजीविटनेस / दस्तावेज़ीकरण · जांच

जांच

संग्रह विश्लेषण · स्थानीय OCR और प्रतिलेखन · विकी

पूर्वावलोकन। जर्नल में, खोज क्षेत्र के बगल में 'सर्वश्रेष्ठ मिलान · शब्द रूप' चुनें। परिणामों को BM25 से रैंक किया जाता है और एक ही शब्द के अन्य रूपों से मेल खाता है: перевод खोज परिणामों में переводом और переводы मिलते हैं, transfer खोज परिणामों में transfers मिलते हैं, एक चीनी वाक्यांश बिना रिक्त स्थान के भी मिल जाता है। 'नवीनतम पहले · सटीक पाठ' पूरे रिकॉर्ड पर पिछली उप-स्ट्रिंग खोज को बनाए रखता है।

इंडेक्स व्युत्पन्न डेटा है। इसे हस्ताक्षरित जर्नल से फिर से बनाया जाता है, यह स्वयं कभी हस्ताक्षरित नहीं होता है और कभी निर्यात में शामिल नहीं होता है। मूल रिकॉर्ड नहीं बदलते हैं।

इस पृष्ठ पर

खोज सिंटैक्स#

लिखें खोजता है
перевод карта दोनों शब्दों वाले रिकॉर्ड, किसी भी रूप में
"переводом на карту" ठीक यही वाक्यांश, इसी क्रम में
бонус OR подарок या शब्द
перевод -казино बहिष्कृत शब्द के बिना रिकॉर्ड
example.com डोमेन और इसके सबडोमेन, साथ ही छिपे हुए लिंक और बटन यूआरएल में भी
@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 के साथ रूसी और यूक्रेनी लेम्मा। वैकल्पिक यूक्रेनी शब्दकोश के बिना एक हल्का यूक्रेनी स्टेमर उपयोग किया जाता है।
लैटिन अंग्रेज़ी स्नोबॉल स्टेमर; विरामचिह्नों को अनदेखा किया जाता है
चीनी, जापानी, कोरियाई, थाई, लाओ, खमेर, म्यांमार ओवरलैपिंग कैरेक्टर जोड़े: कोई भी वाक्यांश बिना रिक्त स्थान के पाया जाता है। चीनी क्वेरीज़ को jieba द्वारा शब्दों में विभाजित किया जाता है।
अन्य स्क्रिप्ट्स सटीक शब्द

यूक्रेनी शब्दकोश (pymorphy3-dicts-uk) GPL-3.0 के तहत वितरित किया जाता है, इसलिए यह डिफ़ॉल्ट रूप से इंस्टॉल नहीं होता है। इसे के साथ इंस्टॉल करें pip install "tgwitness[uk-dictionary]"; इंडेक्स नए एनालाइज़र को नोटिस करता है और स्वयं को फिर से बनाता है।

जहाँ इंडेक्स रहता है#

मोड भंडारण उपयोग करें
डिस्क पर (डिफ़ॉल्ट) search/fulltext.sqlite3 वर्कस्पेस निर्देशिका में विशाल अभिलेखागार; पुनरारंभों के बाद भी बरकरार रहता है
केवल मेमोरी में डिस्क पर कुछ भी नहीं; हर बार शुरू होने पर पुनर्निर्मित डिस्क पर संदेश पाठ की कोई व्युत्पन्न प्रतिलिपि नहीं
बंद कोई अनुक्रमणिका नहीं; नवीनतम पहले · सटीक पाठ बरकरार न्यूनतम इंस्टॉलेशन

मुख्य प्रशासक प्रत्येक वर्कस्पेस के लिए Journal → Filters → Search index के अंतर्गत मोड चुनता है। 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, मानक आउटपुट में केवल परिणाम आता है; प्रगति मानक त्रुटि पर जाती है।

परिणाम और हस्ताक्षरित जर्नल#

इंडेक्स उस अंतिम जर्नल रिकॉर्ड का अनुक्रम संख्या और हैश संग्रहीत करता है जिसे यह कवर करता है और जर्नल खुलने पर उनकी जांच करता है। एक बदले गए, बहाल किए गए या संपादित जर्नल से पुनर्निर्माण होता है। हर प्रतिक्रिया इस स्थिति की रिपोर्ट करती है, और हर हिट को उसके अनुक्रम संख्या द्वारा हस्ताक्षरित जर्नल से वापस पढ़ा जाता है: इंडेक्स यह तय करता है कि कौन से रिकॉर्ड दिखाने हैं और किस क्रम में, कभी भी उनकी सामग्री नहीं। चैट एक्सेस जर्नल के अपने चैट फ़ील्ड पर लागू होता है, न कि इंडेक्स सामग्री पर।

पहचाना गया पाठ#

ओसीआर और ट्रांसक्रिप्ट अपने एन्क्रिप्टेड आर्टिफैक्ट्स में ही रहते हैं। उनका इंडेक्स केवल मेमोरी में मौजूद रहता है और किसी पहचान कार्य (recognition job) के पूरा होने पर फिर से बनाया जाता है। एक हिट उसके media.saved रिकॉर्ड पर दिखाई देता है, जिसमें इंजन, मॉडल और एक अंश के साथ 'मशीन मान्यता' लेबल लगा होता है; इसे कभी भी टेलीग्राम में भेजे गए टेक्स्ट के रूप में प्रस्तुत नहीं किया जाता है। यही इंडेक्स मान्यता प्राप्त टेक्स्ट की खोज (Search recognized text) के लिए काम करता है, जो अभी भी साधारण उप-स्ट्रिंग्स (plain substrings) से भी मेल खाता है।

पहुँच#

चैट-स्कोप्ड एक्सेस केवल अपनी चैट्स से रिकॉर्ड ढूंढता है, जिसमें उनके अटैचमेंट का पहचाना गया टेक्स्ट भी शामिल है। chat: और अन्य फ़िल्टर केवल उस सेट को संकीर्ण कर सकते हैं। स्कोप्ड एक्सेस को दिखाया गया इंडेक्स स्थिति जर्नल के कुल योग को छोड़ देती है। केवल मुख्य प्रशासक ही मोड बदल सकता है या इंडेक्स को फिर से बना सकता है।

आर्काइव और MCP से पूछें#

पूछताछ आर्काइव इस अनुक्रमणिका से अपने स्रोत तब प्राप्त करता है जब यह पूरी हो जाती है: चयनित चैट्स में सर्वोत्तम मेल, जिसमें एक सहेजे गए टेक्स्ट को एक बार गिना जाता है। 24 स्रोत तक भेजे जाते हैं; लंबे टेक्स्ट को उनके मेल के आसपास से काट दिया जाता है और उन्हें संक्षिप्त के रूप में चिह्नित किया जाता है। हाल के परिवर्तनों के बारे में प्रश्न, एक संदेश के सहेजे गए संस्करण, और अनुक्रमणिका के अभी भी बनते रहने के दौरान की गई खोजें पिछली कालानुक्रमिक पुनर्प्राप्ति का उपयोग करती हैं। पूर्वावलोकन यह दिखाता है कि कौन सी विधि का उपयोग किया गया था।

MCP क्लाइंट कॉल कर सकते हैं search_messages के साथ ranked=true और पेज के साथ next_offset. स्कोप्ड कनेक्शन केवल अपनी चैट्स ही प्राप्त करते हैं।

रैंक की गई पन्नीकरण प्रणाली पृष्ठ आकार की परवाह किए बिना अधिकतम पहले 1,000 परिणामों को कवर करती है। अधिक मिलान देखने के लिए क्वेरी, चैट या अवधि को सीमित करें। नवीनतम-प्रथम खोजें प्रत्येक पृष्ठ को चुनने से पहले संदेशों, OCR और ट्रांसक्रिप्शन परिणामों को क्रमबद्ध करती हैं।

निर्भरताएँ#

पैकेज लाइसेंस क्यों
pymorphy3, pymorphy3-dicts-ru, DAWG2-Python MIT रूसी और यूक्रेनी लम्बा; शब्दकोश स्थानीय रूप से लोड किए गए हैं
स्नोबॉलस्टेमर BSD-3-क्लॉज अंग्रेज़ी स्टैम्स, शुद्ध पाइथन
जीबा MIT चीनी क्वेरी विभाजन, शुद्ध पाइथन (केवल स्रोत वितरण)
pymorphy3-dicts-uk (वैकल्पिक) GPL-3.0 पूर्ण यूक्रेनी शब्दकोश

SQLite FTS5 के साथ unicode61 टोकनाइज़र आवश्यक है; यह वर्तमान पाइथन बिल्ड्स में SQLite का हिस्सा है। इसके बिना, बेस्ट-मैच सर्च रिपोर्ट करता है कि यह अनुपलब्ध है।

बेंचमार्क#

python tools/bench_fulltext.py --messages 1000000 --work <empty directory>200 चैट में लिंक और हैंडल के साथ मिश्रित रूसी, यूक्रेनी, अंग्रेजी, चीनी और जापानी संदेशों का एक निर्धारक हस्ताक्षरित जर्नल बनाता है, अनुक्रमणिका बनाता है और सामान्य खोजों (50 परिणाम, 7 बार चलाने का माध्यिका) का समय निकालता है।

मापा गया विंडोज 11, इंटेल कोर i9-13900K, 128 जीबी रैम, पाइथन 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 MiB, जर्नल का 3.8%
नए रिकॉर्ड के ठीक बाद खोजें 8 ms माध्यिका, 9 ms p95
पिछली उप-स्ट्रिंग खोज, वही जर्नल перевод 3.2 s, 银行转账 2.6 s, verify-account.example 2.6 s
खोजें मिलते रिकॉर्ड सर्वोत्तम मिलान, माध्यिका p95 नवीनतम पहले, माध्यिका
सामान्य शब्द, शब्द रूप: перевод 134,403 82 मिलीसेकंड 85 ms 7 मिलीसेकंड
दो शब्द: оплата карта 28,996 43 ms 43 ms 14 ms
दुर्लभ शब्द: розыгрыш подарок 28,881 42 मिलीसेकंड 47 ms 13 ms
सटीक वाक्यांश: "переказ коштів на картку" गिना नहीं गया 35 मिलीसेकंड 36 मिलीसेकंड 6 ms
डोमेन और उपडोमेन: verify-account.example 12,435 17 मिलीसेकंड 17 मिलीसेकंड 3 ms
@username: @support_desk_bot 10,331 15 मिलीसेकंड 16 मिलीसेकंड 3 ms
बिना रिक्त स्थान के चीनी: 银行转账 17,691 23 मिलीसेकंड 24 ms 3 ms
जापानी: リンク 16,603 23 मिलीसेकंड 25 मिलीसेकंड 3 ms
अंग्रेज़ी मूल: withdrawal 27,775 26 मिलीसेकंड 26 मिलीसेकंड 2 मिलीसेकंड
या और बहिष्करण: бонус OR подарок -казино 268,034 190 मिलीसेकंड 193 ms 19 मिलीसेकंड
चैट फ़िल्टर: chat:-1000000000007 перевод 652 9 मिलीसेकंड 9 मिलीसेकंड 6 ms
अवधि फ़िल्टर: since:2026-01-01 until:2026-01-31 выплата 115,732 155 ms 156 ms 81 ms

एक सटीक वाक्यांश को रैंक क्रम में उम्मीदवारों पर शाब्दिक रूप से जांचा जाता है जब तक कि पेज भर न जाए, इसलिए इसकी कुल संख्या की गिनती नहीं की जाती है। मेल खाने वाले रिकॉर्ड की संख्या के साथ समय बढ़ता है; चैट या अवधि को सीमित करने से व्यापक खोजें तेज़ हो जाती हैं। सिंथेटिक कॉर्पस एक छोटी शब्दावली को दोहराता है, इसलिए आम शब्द वास्तविक चैट की तुलना में कहीं अधिक रिकॉर्ड से मेल खाते हैं।