Tham khảo / Lưu trữ & tích hợp
Telegram · Tìm kiếm toàn văn
Tìm các tin nhắn đã lưu theo dạng từ, cụm từ chính xác, tên miền và @tên người dùng, hiển thị kết quả phù hợp nhất trước tiên, với chỉ mục được liên kết với nhật ký có chữ ký.
TgWitness / Tài liệu · Điều tra
Phân tích kho lưu trữ · OCR và chuyển đổi văn bản tại địa phương · Wiki
Xem trước. Trong Nhật ký, chọn "Kết quả phù hợp nhất · các dạng từ" bên cạnh trường tìm kiếm. Kết quả được xếp hạng theo thuật toán BM25 và bao gồm các dạng khác của cùng một từ: "перевод" sẽ tìm thấy "переводом" và "переводы", "transfer" sẽ tìm thấy "transfers", một cụm từ tiếng Trung sẽ được tìm thấy mà không cần khoảng trắng. Chế độ "Mới nhất trước · văn bản chính xác" duy trì tìm kiếm chuỗi con trước đó trên toàn bộ bản ghi.
Chỉ mục là dữ liệu được trích xuất. Nó được tái tạo từ nhật ký đã ký, bản thân nó không bao giờ được ký và không bao giờ được xuất ra. Các bản ghi gốc không bị thay đổi.
Trên trang này
Cú pháp tìm kiếm#
| Viết | Tìm kiếm |
|---|---|
перевод карта |
Các bản ghi chứa cả hai từ, dưới bất kỳ hình thức nào |
"переводом на карту" |
Cụm từ chính xác, theo thứ tự này |
бонус OR подарок |
Bất kỳ từ nào |
перевод -казино |
Các bản ghi không chứa từ bị loại trừ |
example.com |
Tên miền và các tên miền con của nó, bao gồm cả trong các liên kết ẩn và URL của các nút |
@username, t.me/username |
Các đề cập và liên kết đến tài khoản, cùng các tin nhắn mà tài khoản đó đã gửi |
#tag |
Thẻ hashtag |
+79991234567, một địa chỉ ví, một địa chỉ email |
Giá trị tương tự dưới dạng văn bản hoặc liên kết |
from:@username, from:123456 |
Các tin nhắn từ người gửi đó |
chat:-1001234567890 |
Một cuộc trò chuyện; nó chỉ có thể hạn chế quyền truy cập của chính bạn |
id:42 |
Các phiên bản đã lưu của tin nhắn số 42 |
since:2026-01-01 until:2026-01-31 |
Thời gian quan sát; một ngày không kèm giờ sẽ bao gồm cả ngày |
kind:edited |
Chỉ chỉnh sửa (new, snapshot, edited, recovered) |
source:ocr, source:transcription, source:all |
Văn bản được nhận diện thay vì, hoặc cùng với, các tin nhắn |
Các giới từ và từ chức năng khác sẽ bị bỏ qua khi có các từ khác xuất hiện. Các chữ cái trông giống nhau xen kẽ trong một từ (chữ a La-tinh nằm trong một từ Cyrillic), các ký tự Unicode có chiều rộng đầy đủ và trang trí, cũng như các ký tự vô hình sẽ được chuẩn hóa.
Ngôn ngữ#
Ngôn ngữ được xác định cho từng bản ghi dựa trên kịch bản và các ký tự của nó:
| Tập lệnh | Phù hợp |
|---|---|
| Chữ Cyrillic | Các từ gốc tiếng Nga và tiếng Ukraina với pymorphy3. Nếu không có từ điển tiếng Ukraina tùy chọn, công cụ sẽ sử dụng một bộ phân tích gốc tiếng Ukraina nhẹ. |
| Tiếng Latinh | Bộ phân tích từ gốc Snowball tiếng Anh; các dấu phụ được bỏ qua |
| Tiếng Trung, Tiếng Nhật, Tiếng Hàn, Tiếng Thái, Tiếng Lào, Tiếng Khmer, Tiếng Miến Điện | Các cặp ký tự trùng lặp: bất kỳ cụm từ nào cũng được tìm thấy mà không có khoảng trắng. Các truy vấn tiếng Trung được tách thành các từ bằng jieba |
| Các tập lệnh khác | Các từ chính xác |
Từ điển tiếng Ukraina (pymorphy3-dicts-uk) được phân phối theo giấy phép GPL-3.0, do đó nó
không được cài đặt theo mặc định. Hãy cài đặt nó bằng lệnh pip install "tgwitness[uk-dictionary]";
chỉ mục sẽ nhận diện trình phân tích mới và tự động xây dựng lại.
Vị trí lưu trữ chỉ mục#
| Chế độ | Lưu trữ | Cách sử dụng |
|---|---|---|
| Trên đĩa (mặc định) | search/fulltext.sqlite3 trong thư mục workspace |
Các kho lưu trữ lớn; vẫn hoạt động bình thường sau khi khởi động lại |
| Chỉ lưu trong bộ nhớ | Không lưu trữ dữ liệu trên đĩa; được xây dựng lại mỗi khi khởi động | Không lưu bản sao nội dung tin nhắn trên đĩa |
| Tắt | Không có chỉ mục; Hiển thị từ mới nhất trước · giữ nguyên văn bản chính xác | Cài đặt tối thiểu |
Quản trị viên chính chọn chế độ trong mục Nhật ký → Bộ lọc → Chỉ mục tìm kiếm
cho từng không gian làm việc. TGWITNESS_FULLTEXT=disk|memory|off thiết lập giá trị mặc định cho
các không gian làm việc chưa có lựa chọn riêng. Chuyển sang chế độ lưu trữ trong bộ nhớ hoặc tắt sẽ xóa tệp.
Tệp chỉ mục có mức độ bảo vệ tương tự như nhật ký: nó được lưu trữ trong thư mục dữ liệu riêng tư
. Tệp này không được mã hóa và không nằm trong các bản sao lưu hoặc bản sao lưu ngoài hệ thống.
Các bản ghi mới được lập chỉ mục ở chế độ nền trong vòng vài giây; khi tìm kiếm, hệ thống cũng ưu tiên lập chỉ mục các bản ghi tồn đọng gần đây nhất, do đó bản ghi vừa được lưu cách đây một lúc sẽ được tìm thấy. Một nhật ký hiện có sẽ được lập chỉ mục sau khi cập nhật mà không làm gián đoạn hoạt động của bảng điều khiển; cho đến lúc đó, kết quả tìm kiếm sẽ bao gồm các bản ghi đã được lập chỉ mục và nhật ký sẽ hiển thị tiến trình. Quá trình xây dựng lại chỉ mục sẽ bắt đầu lại từ bản ghi đầu tiên.
python -m tgwitness index status --data-dir data/live
python -m tgwitness index rebuild --data-dir data/live --json
rebuild cần dừng bảng điều khiển (mã thoát là 3 nếu không). Với --json,
đầu ra tiêu chuẩn chỉ hiển thị kết quả; tiến trình được ghi vào đầu ra lỗi tiêu chuẩn.
Kết quả và nhật ký được ký điện tử#
Chỉ mục lưu trữ số thứ tự và giá trị băm của bản ghi nhật ký cuối cùng mà nó bao phủ và đối chiếu chúng với nhật ký khi mở. Một nhật ký bị thay thế, khôi phục hoặc chỉnh sửa sẽ gây ra quá trình xây dựng lại. Mỗi phản hồi báo cáo vị trí này, và mỗi kết quả khớp được đọc lại từ nhật ký có chữ ký thông qua số thứ tự của nó: chỉ mục quyết định những bản ghi nào sẽ hiển thị và theo thứ tự nào, chứ không bao giờ là nội dung của chúng. Quyền truy cập trò chuyện được áp dụng cho trường trò chuyện riêng của nhật ký, chứ không phải nội dung của chỉ mục.
Văn bản được nhận diện#
Dữ liệu OCR và bản chép lời vẫn được lưu trữ trong các tệp mã hóa của chúng. Chỉ mục của chúng chỉ tồn tại trong
bộ nhớ và được xây dựng lại khi một tác vụ nhận dạng hoàn tất. Một kết quả khớp sẽ xuất hiện trong
media.saved bản ghi đó, được gắn nhãn là “nhận diện tự động” kèm theo công cụ, mô hình và một
đoạn trích; nó không bao giờ được hiển thị dưới dạng văn bản đã gửi trên Telegram. Chỉ mục này cũng được sử dụng cho
tính năng Tìm kiếm văn bản đã nhận diện, vốn vẫn hỗ trợ so khớp với các chuỗi con thuần túy.
Truy cập#
Quyền truy cập trong phạm vi cuộc trò chuyện chỉ tìm thấy các bản ghi từ các cuộc trò chuyện đó, bao gồm cả văn bản được nhận diện từ
các tệp đính kèm của chúng. chat: và các bộ lọc khác chỉ có thể thu hẹp tập dữ liệu đó. Trạng thái chỉ mục
hiển thị cho quyền truy cập theo phạm vi không bao gồm tổng số bản ghi trong nhật ký. Chỉ quản trị viên chính mới có thể thay đổi
chế độ hoặc xây dựng lại chỉ mục.
Hỏi kho lưu trữ và MCP#
Khi quá trình lập chỉ mục hoàn tất, hệ thống lưu trữ sẽ truy xuất các nguồn từ chỉ mục này: các kết quả khớp tốt nhất trong các cuộc trò chuyện đã chọn, với mỗi đoạn văn bản được lưu chỉ được tính một lần. Tối đa 24 nguồn được gửi; các văn bản dài sẽ được cắt xung quanh phần khớp và được đánh dấu là bị cắt ngắn. Các câu hỏi về những thay đổi gần đây, các phiên bản đã lưu của một tin nhắn và các tìm kiếm trong khi chỉ mục vẫn đang được xây dựng sẽ sử dụng phương thức truy xuất theo thứ tự thời gian trước đó. Bản xem trước hiển thị phương thức nào đã được sử dụng.
Các khách hàng MCP có thể gọi search_messages với ranked=true và truy cập trang với
next_offset. Các kết nối có phạm vi chỉ nhận được các cuộc trò chuyện của riêng họ.
Chức năng phân trang theo thứ tự xếp hạng chỉ hiển thị tối đa các kết quả đầu tiên thuộc nhóm 1,000, bất kể kích thước trang. Hãy thu hẹp phạm vi truy vấn, cuộc trò chuyện hoặc khoảng thời gian để xem thêm các kết quả phù hợp. Chế độ tìm kiếm theo thứ tự từ mới nhất đến cũ nhất sẽ sắp xếp các tin nhắn, kết quả OCR và phiên âm trước khi chọn từng trang.
Các thành phần phụ thuộc#
| Gói | Giấy phép | Tại sao |
|---|---|---|
| pymorphy3, pymorphy3-dicts-ru, DAWG2-Python | MIT | Các từ gốc tiếng Nga và tiếng Ukraina; các từ điển được tải cục bộ |
| snowballstemmer | Điều khoản BSD-3 | Các từ gốc tiếng Anh, Python thuần túy |
| jieba | MIT | Phân đoạn truy vấn tiếng Trung, viết hoàn toàn bằng Python (chỉ phân phối mã nguồn) |
| pymorphy3-dicts-uk (tùy chọn) | GPL-3.0 | Từ điển tiếng Ukraina đầy đủ |
SQLite FTS5 yêu cầu có unicode61 tokenizer; nó là một phần của SQLite trong
các bản dựng Python hiện tại. Nếu thiếu nó, tính năng tìm kiếm kết quả phù hợp nhất sẽ báo lỗi rằng tính năng này không khả dụng.
Đánh giá hiệu năng#
python tools/bench_fulltext.py --messages 1000000 --work <empty directory>tạo ra một nhật ký có chữ ký xác định trước chứa các tin nhắn hỗn hợp bằng tiếng Nga, tiếng Ukraina, tiếng Anh,
tiếng Trung và tiếng Nhật kèm theo các liên kết và mã định danh trong 200 cuộc trò chuyện, xây dựng chỉ mục
và đo thời gian thực hiện các tìm kiếm điển hình (50 kết quả, giá trị trung vị của 7 lần chạy).
Được đo trên Windows 11, Intel Core i9-13900K, 128 GB RAM, Python 3.12.10, SQLite
3.49.1, dữ liệu trên ổ đĩa exFAT, trình phân tích fulltext-v1+pymorphy3-ru+light-uk+snowball-en:
| Đo lường | Kết quả |
|---|---|
| Nhật ký được ký điện tử | 1.000.000 tin nhắn, 1,50 GiB, được ghi lại trong 19 phút |
| Xây dựng chỉ mục từ nhật ký | 71 giây, khoảng 14.141 tin nhắn mỗi giây |
| Tệp chỉ mục | 58 MiB, chiếm 3,8% dung lượng nhật ký |
| Tìm kiếm ngay sau một bản ghi mới | Giá trị trung vị là 8 ms, p95 là 9 ms |
| Tìm kiếm chuỗi con trước đó, cùng một nhật ký | перевод 3,2 giây, 银行转账 2,6 giây, verify-account.example 2,6 giây |
| Tìm kiếm | Các bản ghi khớp nhau | Kết quả phù hợp nhất, giá trị trung vị | trang 95 | Mới nhất trước, trung bình |
|---|---|---|---|---|
Từ thông dụng, các dạng từ: перевод |
134,403 | 82 ms | 85 ms | 7 ms |
Hai từ: оплата карта |
28,996 | 43 ms | 43 ms | 14 ms |
Từ hiếm: розыгрыш подарок |
28,881 | 42 ms | 47 ms | 13 ms |
Cụm từ chính xác: "переказ коштів на картку" |
không được tính | 35 ms | 36 ms | 6 ms |
Tên miền cùng các tên miền con: verify-account.example |
12,435 | 17 ms | 17 ms | 3 ms |
@username: @support_desk_bot |
10,331 | 15 ms | 16 ms | 3 ms |
Tiếng Trung không có khoảng trắng: 银行转账 |
17,691 | 23 ms | 24 ms | 3 ms |
Tiếng Nhật: リンク |
16,603 | 23 ms | 25 ms | 3 ms |
Cơ sở tiếng Anh: withdrawal |
27,775 | 26 ms | 26 ms | 2 ms |
HOẶC và loại trừ: бонус OR подарок -казино |
268,034 | 190 ms | 193 ms | 19 ms |
Bộ lọc cuộc trò chuyện: chat:-1000000000007 перевод |
652 | 9 ms | 9 ms | 6 ms |
Bộ lọc theo khoảng thời gian: since:2026-01-01 until:2026-01-31 выплата |
115,732 | 155 ms | 156 ms | 81 ms |
Một cụm từ chính xác sẽ được kiểm tra theo nghĩa đen trên các kết quả theo thứ tự xếp hạng cho đến khi trang đầy, do đó tổng số kết quả của nó không được tính. Thời gian xử lý tăng theo số lượng bản ghi khớp; hạn chế phạm vi cuộc trò chuyện hoặc khoảng thời gian sẽ giúp các tìm kiếm rộng diễn ra nhanh hơn. Bộ dữ liệu tổng hợp lặp lại một số từ vựng hạn chế, do đó các từ thông dụng sẽ khớp với nhiều bản ghi hơn so với trong các cuộc trò chuyện thực tế.