👀 前言:

Telegram 自推出以来中文检索功能就一直被诟病吐槽,因为中文属于 CJK语言

CJK文字中文日文韩文的统称,这些语言全部含有汉字及其变体,某些会与其他文字混合使用。

这里有更详细的介绍「 为什么 Telegram 不能搜寻中文讯息」,有兴趣的可以看看

Newlearnerの自留地
#telegram #Search 🔍 为什么 Telegram 不能搜寻中文讯息 ⭕️ 圈重点: - Telegram 使用 SQLite 作为资料库 - fts 全文搜索将字串以 Tokenizer 切割成短语,分别取 Hash,寻找时与哈希表进行比对 - 标记生成器根据分离器、分隔符切割字串 - 分离器、分隔符之外的成分为「令牌」,有“大号*(字母),N *(数字)及Co(其他)”三种预设 - 中日韩文字属于 unicode CJK,绝大多数被识别为令牌 (╯﹏╰) 从而,汉字语汉字间没有任何分隔符,会被整串拿去哈希,于是导致搜寻无效。本文从代码的角度很好地说明了 Teleg…

由于我是频道 Newlearnerの自留地 的关注者,经常会在上面查看一些开发者新闻资讯或寻找适合自己的开源项目。

后来,发现他们频道有自己的引索网页和bot,用起来确实十分方便,便开始尝试折腾自建。

当我发布属于自己 Telegram频道中文检索bot 后,发现很多人留言表示对此感兴趣,便写下了这篇博客。

❓可以用来做什么?

  1. 如果你关注的频道没有使用 #tag 来为每个帖子标注,可能无法通过 Telegram 内置搜索引擎找到你想要的内容。
  2. 可以同时在多个频道/群组(几百上千万,甚至更多条信息)中检索同一个关键词,前提是你的服务器能够承受住。

因此,当信息足够多时,想要在这里面找到想要的信息,关键词应尽量补足。不能说只搜 Apple、特斯拉,这样可能会出现很多无关信息扰乱视野。

🔒 关于隐私

不要直接将索引了私有群组/频道的 bot 公开于网络上!任何人都能通过它获取其内容的。

公开使用的 Bot 在索引公开群组或频道的内容前,也请获取群组/频道管理员的同意。

自用 Bot 请通过 @BotFather 打开 隐私模式,关闭群组权限,使他人无法邀请该 Bot 进群,并设置 UID 使 Bot 仅供你个人可用(若支持)。

👉 项目汇总:

首先,我在 自留地 看到了他们分享了 telegram-search 的使用教程,它支持 Lucene 语法。例如:

“+iPhone +Android”表示寻找一条既包含“iPhone”又包含“Android”字段的消息(即 Lucene 查询语法)

+每日速览 +date:2019-08-12

+每日速览 +date:[2019-08-12 TO 2020-04-17]

前提条件

  1. 申请 Telegram MTProto API ID: https://my.telegram.org/app
  2. 申请 Telegram Bot ID:@BotFather准备一个 Telegram 账号
  3. 安装 Python3:https://www.python.org/downloads/
📖
详细搭建流程请查阅 GitHub README

由于我使用的几台vps均因各种原因搭建失败,因此没有选择使用它,大家可以参考一下。

🙊
如果你属于第1、2种情况,可以跳过该章节,查看一下个项目
  1. 无 Arm 架构对应的 docker 镜像,因此不适用于例如:甲骨文 Arm 架构的 VPS
  2. Ubuntu 18.04.6 无法安装依赖: pip install -r requirements.txt,碍于这台服务器跑着其他东西,懒得重装了。
  3. 使用小内存(512 MB、1 GB)服务器搭建,如白嫖的Amd甲骨文,建议开启 1G Swap,否则可能将无法启动程序。开启命令见 原文
顺带一提,此项目上一次更新是2021年8月8日,因此可能不会再加入新的功能。有能力的可以自行 Fork 魔改。

🤖️ TG Searcher

由于无法搭建 telegram-search,我便开始在 GitHub 寻找新的项目。

功夫不负有心人,我发现了 TG Searcher ,它提供了三种部署的方法:手动部署,使用 docker-compose 部署和 nix flake 部署。

关于如何运行和部署 Searcher,参见 deploy.md 。优先推荐使用Docker,我个人觉得是最省心的。下面展示的是效果图:

example.jpg
效果图来自:GitHub

🔍 需要注意的几点:

这里是一份修改后的 config/searcher.yaml 模版,下面的文字看不懂就直接复制这份模版然后修改 api_idapi_hashphoneadmin_idbot_token 即可开始搭建。

  1. 作者在 configuration.md 提供的简版配置与 docker-compose.yaml 中的 runtime_dir 路径不一致,我们需要将 config/searcher.yaml 中的 runtime_dir 路径修改为 runtime_dir: /app/config/tg_searcher_data
  2. config/searcher.yaml 中的 frontends-config 的最后加上 redis: redis:6379 🧑‍💻开始搭建
  3. 建议使用小号的 API,因为issue中曾报告过一次误封的情况,虽然可以发邮件解封但还是挺误事的。
  4. api_idapi_hashadmin_id不一定要属于同一个号,admin_id 可以使用主号,只有 admin_id 对应的账号才拥有 Bot 的管理权。
  5. 填入api_idapi_hash的账号,需加入对应的频道/群组,否则无法同步后续更新的内容。
  6. admin_idbot_tokend需要属于同一个Telegram账号,否则程序会因无法访问bot报错。

🧑‍💻 快速上手:

搭建完毕后,发送 /download_chat [群组频道UID/用户名] 即可拉取数据,如果不需要检索历史记录只想从现在起记录新内容,可使用 /monitor_chat [群组频道UID/用户名] 即可加入监控列表。

详细讲解见 README

对于需要检索大量群组消息的用户,作者是这么说的。

我将此项目托管在了甲骨文Arm里,正好占用一下内存,跑跑流量避免因使用频率不达标被回收~~

如果你实在是搞不懂怎么也无法搭建成功又或者懒得买VPS,我可以专门为你部署一个 bot,价格为10U/年,有意可请通过 Telegram 私聊 。(都教到这个程度了,能自己动手就自己动手吧)

🤖️ telegram-search-bot

这是一个使用 inline 模式搜索的项目,不太适合我的使用场景,因此只停留在发现这一步,如果适合你可以自行研究一下。

功能介绍

  • 群聊消息记录和多个关键词搜索(可翻页)
  • 定位消息位置
  • 带限制的命令控制
  • 支持多群组查询(判断是否群成员)
  • 支持用户名搜索
  • 消息编辑后数据库同步更新
演示

🤖️ luoxu

落絮可以 CJK 友善的方式索引 Telegram 群组与频道,并提供 API 供前端使用。

Telegram 频道 Telegram 群组 爱发电

目录
太棒了! 下一步, 完成电子邮件的验证以获得 Yummy's Blog 的完全访问权限.
Welcome back! You've successfully signed in.
您已成功订阅 Yummy's Blog.
成功!您的账号已完成激活,您现在可以访问所有的内容了。
成功!您的账单信息已更新。
您的账单信息未更新。