从 SearX 到 Hister:asciimoo 为何抛弃元搜索,押注本地索引?
从 SearX 到 Histerasciimoo 为何抛弃元搜索押注本地索引【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister如果你用过自托管搜索圈大概率听说过 SearX——那个把 Google、Bing 等上游引擎聚合到私有实例里的元搜索引擎。它的创始人 asciimooAdam Tauber在维护该项目七年后亲手启动了另一个项目Hister一个不再聚合全网、而是只索引你自己看过的内容的本地搜索引擎。一边是元搜索一边是本地索引方向几乎相反。这篇自我否定式的转型背后是架构层面的清醒认知而不是心血来潮。本文结合 asciimoo 本人的公开复盘与 Hister 仓库源码拆解他抛弃元搜索的真实原因以及本地索引路线凭什么成立。元搜索的天花板不是 bug是架构在 Hister 官方博客的复盘文章《Lessons I Learned from Creating Searx》中asciimoo 用hard limits baked in from the start来形容元搜索架构。注意他的措辞这些限制不是代码 bug而是模型本身的后果。他列举了五条元搜索固有缺陷每一条都值得仔细看。结果质量完全依赖上游引擎。元搜索只是把查询转发给 Google、Bing再聚合返回。上游引擎决定给你看什么被降权、被过滤、排名靠后的页面无论你的实例优化得多好都搜不到。你自己的实例对结果几乎没有影响力。隐私保障是部分的。虽然你的 IP 被服务器挡住了但查询本身、查询时间、来源 IP 仍然暴露给上游引擎。如果某个实例的流量来源单一或上游按 IP 长期关联查询匿名性会随时间衰减。查询仍然离开了你的机器这是元搜索无法绕开的事实。排序权不在你手里。可以对抓取结果做二次重排但核心的相关性信号来自第三方。你无法提升自己信任的站点也无法压制觉得没用的站点。查询语法是碎片化的。不同后端支持不同的搜索语法想在多个引擎间写一条一致的精确查询几乎做不到。没有记忆。元搜索引擎不知道你读过什么、什么对你有用、上周搜过什么。每次会话都从零开始。此外还有一切实时抓取网页方案的共同问题断网即失联、必须访问原站才能读内容、认证内容内部 wiki、私有仓库、登录态页面永远够不到。作者的原话是这些问题无法在当前元搜索模型内部用更好的代码修复要解决它们需要一个不同的起点。Hister 的本地索引换一个起点Hister 的回应是换掉整个数据流方向不再把查询转发出去而是把内容收进来。索引的构建不依赖任何第三方搜索引擎而是来自三样东西你访问过的网页、你机器上的本地文件、你的浏览器历史。这首先是一个架构选择。仓库里 server/indexer/indexer.go 以 Bleve 为内核github.com/blevesearch/bleve/v2含 scorch 存储、语言感知的多索引别名数据目录结构在 webui/website/src/content/docs/data-lifecycle.md 中写得很清楚index.db与index_LANG.db存全文索引data/html/存压缩后的 HTML 预览db.sqlite3管会话、版本差异与爬取任务。平均每存一页约占用 100KB 磁盘没有自动过期、没有配额——数据生命周期完全由你掌控。本地索引带来的第一个变化是查询再也不会离开你的机器。搜索请求在本地检索不产生任何上游流量也就谈不上查询暴露。第二个变化是索引反映你的真实关切而不是某个算法的猜测你读过的文档、看过的内部系统、私藏的技术资料都被无差别纳入。内容采集是自动化的关键。除了浏览器扩展在访问时自动抓取渲染后的页面命令行还提供了一整族导入入口见 webui/website/src/content/docs/import.mdhister import browser history # Firefox/Chrome/Safari 等浏览器历史 hister import browser bookmarks --browser firefox hister import file ~/notes ~/Documents/report.pdf hister import linkding INSTANCE_URL # 稍后读/书签服务的增量同步hister import browser支持自动检测 11 种浏览器的历史数据库cmd/browser.go包括 Safari 的History.db和 Ladybird 的历史表并以只读、不可变模式打开数据库导入本身不污染原库。本地索引的另一个直接红利是离线副本Hister 为索引的页面保存压缩 HTML 预览原文删了、站点挂了、断网了内容依然可读——这是元搜索和任何依赖实时抓取的方案都给不了的可靠性。从搜得到到搜得准查询语言与规则系统本地索引不只解决了隐私与可达性它还让排序权和过滤权真正回到用户手里。这在元搜索里是不可企及的上游引擎决定了排序用户只能接受。Hister 的查询语言在 webui/website/src/content/docs/query-language.md 中完整定义。除了短语、通配符、否定、括号或(a|b)这些常规能力它支持真正的字段级检索domain:github.com # 限定域名 site:example.com # 匹配域名及其子域 url_re:^https?://example\.com/private/ # 用 Go 正则匹配 URL visits:10.. # 访问 10 次以上的页面 updated:90d # 90 天内未更新的内容 metadata.source:linkding # 按导入来源过滤 type:file language:en # 本地文件 语言过滤这套语法让回忆型搜索变得极其顺手你记得读过一个关于某问题的文档但想不起具体 URL一条domain:example.com title:xxx -tutorial就能把范围收窄到个位数结果。排序权体现在规则系统里webui/website/src/content/docs/rules.md。四类规则分别作用于索引阶段与检索阶段skip索引时直接丢弃匹配 URL屏蔽广告站、登录页、追踪参数priority检索时给匹配 URL 大幅加分永远把自己的 wiki 顶到最前versioning对匹配页面记录每次变更的 diff把网页改了什么变成可检索、可回溯的档案alias查询时把关键词展开成完整表达式比如work展开为domain:(internal.example.com|jira.example.com)。对比元搜索里想屏蔽一个域名还得在工具外部写过滤规则的窘境这套系统把可控性内建到了产品逻辑里。作者在复盘中说Hister 因此可以提升或压制任何域名这正是元搜索架构给不了的。不是替代而是分层SearX 与 Hister 的互补分工那么asciimoo 是否认为本地索引能完全取代元搜索他自己给出了否定的答案。在复盘的Combining the Two一节他明确写道Hister 尚不能完全替代现有网络搜索引擎——当需要搜索自己收藏之外的未知信息时SearX 可以作为回退方案。这种分层的思路在 Hister 源码里是显式设计的。默认配置中config/config.go预置了外部回退搜索引擎SearchURL: https://google.com/search?q{query},而客户端侧把它做成了热键动作默认配置里alto绑定open_query_in_search_engine同一文件的Hotkeys定义Web 界面的快捷键提示也明确写着在当前配置的搜索引擎中打开此查询见 webui/app/src/routes/page.svelte 中的 tips。前端实现则是把{query}占位符替换成当前查询后打开新页面webui/app/src/lib/search.ts 的getSearchUrl。也就是说完整的工作流是这样运转的先在本地索引里搜命中即秒开搜不到按一个热键同一查询无缝移交到 SearX 实例或其他外部引擎。前者提供深度——你遇到过的东西、登录态页面、私有文档后者提供广度——你不知道、也从未访问过的全网内容。隐私与覆盖范围在这个方案里不再互斥。这也是作者在《How I Cut My Google Search Dependence in Half》中亲测过的数据使用 Hister 六周后约 50% 的日常搜索在本地完成其余才回退到外部引擎。他给出的解释很有意思人每天有一半以上的搜索是回忆型——找自己读过但忘了存的内容——而不是发现型探索。对回忆型搜索而言Google 其实是一个糟糕的工具它不知道你读过什么更搜不到你登录后才能看到的页面。而本地索引天然就是为此优化的。结语从 SearX 到 Histerasciimoo 的转变与其说是技术路线的更替不如说是一次对搜索本质的重新划分元搜索解决发现本地索引解决回忆。前者受制于上游引擎的 API 与排序后者把质量、隐私、排序和记忆全部收回本地。他在复盘结尾说SearX 教会他的东西Hister 值得一看因为Hister 源自同样的价值观也源自同样的挫败感——只是这一次起点换成了你自己的数据。对于自托管用户来说这个组合的价值已经很清晰本地索引负责把我看过的东西变成秒级的私有知识库SearX 负责兜底未知世界的探索。两套系统各司其职用户既保住了隐私也没有牺牲搜索的广度。【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考