👀 前言:

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 的完全访问权限.
“欢迎回来!您已成功登录
您已成功订阅 Yummy's Blog.
成功!您的账户已经完全激活,您现在可以访问全部内容了。
您的账单信息已更新!
您的账单信息需要更新!