👀 前言:
Telegram 自推出以来中文检索功能就一直被诟病吐槽,因为中文属于 CJK语言。
这里有更详细的介绍「 为什么 Telegram 不能搜寻中文讯息」,有兴趣的可以看看
由于我是频道 Newlearnerの自留地 的关注者,经常会在上面查看一些开发者新闻资讯或寻找适合自己的开源项目。
后来,发现他们频道有自己的引索网页和bot,用起来确实十分方便,便开始尝试折腾自建。
当我发布属于自己 Telegram频道 的 中文检索bot 后,发现很多人留言表示对此感兴趣,便写下了这篇博客。
❓可以用来做什么?
- 如果你关注的频道没有使用 #tag 来为每个帖子标注,可能无法通过 Telegram 内置搜索引擎找到你想要的内容。
- 可以同时在多个频道/群组(几百上千万,甚至更多条信息)中检索同一个关键词,前提是你的服务器能够承受住。
因此,当信息足够多时,想要在这里面找到想要的信息,关键词应尽量补足。不能说只搜 Apple、特斯拉,这样可能会出现很多无关信息扰乱视野。
🔒 关于隐私
不要直接将索引了私有群组/频道的 bot 公开于网络上!任何人都能通过它获取其内容的。
公开使用的 Bot 在索引公开群组或频道的内容前,也请获取群组/频道管理员的同意。
自用 Bot 请通过 @BotFather 打开 隐私模式,关闭群组权限,使他人无法邀请该 Bot 进群,并设置 UID 使 Bot 仅供你个人可用(若支持)。
👉 项目汇总:
🤖️ telegram-search
首先,我在 自留地 看到了他们分享了 telegram-search 的使用教程,它支持 Lucene 语法。例如:
“+iPhone +Android”表示寻找一条既包含“iPhone”又包含“Android”字段的消息(即 Lucene 查询语法)
+每日速览 +date:2019-08-12
+每日速览 +date:[2019-08-12 TO 2020-04-17]
前提条件:
- 申请 Telegram MTProto API ID: https://my.telegram.org/app
- 申请 Telegram Bot ID:@BotFather准备一个 Telegram 账号
- 安装 Python3:https://www.python.org/downloads/
由于我使用的几台vps均因各种原因搭建失败,因此没有选择使用它,大家可以参考一下。
- 无 Arm 架构对应的 docker 镜像,因此不适用于例如:甲骨文 Arm 架构的 VPS
- Ubuntu 18.04.6 无法安装依赖:
pip install -r requirements.txt
,碍于这台服务器跑着其他东西,懒得重装了。 - 使用小内存(512 MB、1 GB)服务器搭建,如白嫖的Amd甲骨文,建议开启 1G Swap,否则可能将无法启动程序。开启命令见 原文
🤖️ TG Searcher
由于无法搭建 telegram-search,我便开始在 GitHub 寻找新的项目。
功夫不负有心人,我发现了 TG Searcher ,它提供了三种部署的方法:手动部署,使用 docker-compose 部署和 nix flake 部署。
关于如何运行和部署 Searcher,参见 deploy.md 。优先推荐使用Docker,我个人觉得是最省心的。下面展示的是效果图:
🔍 需要注意的几点:
这里是一份修改后的 config/searcher.yaml 模版,下面的文字看不懂就直接复制这份模版然后修改 api_id
、api_hash
、phone
、admin_id
、bot_token
即可开始搭建。
- 作者在 configuration.md 提供的简版配置与 docker-compose.yaml 中的
runtime_dir
路径不一致,我们需要将config/searcher.yaml
中的runtime_dir
路径修改为 runtime_dir: /app/config/tg_searcher_data - 在
config/searcher.yaml
中的frontends-config
的最后加上redis: redis:6379
🧑💻开始搭建 - 建议使用小号的 API,因为issue中曾报告过一次误封的情况,虽然可以发邮件解封但还是挺误事的。
api_id
、api_hash
和admin_id
不一定要属于同一个号,admin_id 可以使用主号,只有admin_id
对应的账号才拥有 Bot 的管理权。- 填入
api_id
、api_hash
的账号,需加入对应的频道/群组,否则无法同步后续更新的内容。 admin_id
、bot_tokend
需要属于同一个Telegram账号,否则程序会因无法访问bot报错。
🧑💻 快速上手:
搭建完毕后,发送 /download_chat [群组频道UID/用户名] 即可拉取数据,如果不需要检索历史记录只想从现在起记录新内容,可使用 /monitor_chat [群组频道UID/用户名] 即可加入监控列表。
详细讲解见 README
我将此项目托管在了甲骨文Arm里,正好占用一下内存,跑跑流量避免因使用频率不达标被回收~~
如果你实在是搞不懂怎么也无法搭建成功又或者懒得买VPS,我可以专门为你部署一个 bot,价格为10U/年,有意可请通过 Telegram 私聊 。(都教到这个程度了,能自己动手就自己动手吧)
🤖️ telegram-search-bot
这是一个使用 inline 模式搜索的项目,不太适合我的使用场景,因此只停留在发现这一步,如果适合你可以自行研究一下。
功能介绍
- 群聊消息记录和多个关键词搜索(可翻页)
- 定位消息位置
- 带限制的命令控制
- 支持多群组查询(判断是否群成员)
- 支持用户名搜索
- 消息编辑后数据库同步更新
🤖️ luoxu
落絮可以 CJK 友善的方式索引 Telegram 群组与频道,并提供 API 供前端使用。