
用 Hister 自建本地搜索引擎把一半的 Google 搜索留在自己的浏览器历史里【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister这是一篇基于 Hister 项目的一手实践记录与实现解析作者用 6 周时间自建了一个本地化网页历史搜索引擎将自己日常约一半的 Google 搜索转化为对自己已浏览内容的回忆型检索recall search。读完本文你将理解发现型搜索与回忆型搜索的本质区别掌握 Hister 的本地全文检索、字段化查询语言、skip/priority/versioning 规则、别名机制等核心能力并了解如何以近乎零成本的方式开始使用这套方案。问题在线搜索已经不是过去的样子作者一位开发者与知识工作者发现自己每天都会无数次打开 Google 搜索这个动作已经成为几乎无意识的条件反射——它不断把注意力从实际工作上拉开。然而这种体验在不知不觉中已经变差了很多主要体现在四个方面广告过多曾经干净的链接列表如今要翻过多条赞助结果、购物推荐和推广内容才能到达自然结果。真正需要的信息往往要等用户在心里过滤完所有商业噪音之后才出现在页面中段。SEO 操纵自然结果本身也被 SEO 技巧操纵排名反映的更多是对搜索引擎的优化程度而不是对用户的价值。面向机器优化、而非面向人类写作的网站霸占前排真正有用的小站和个人博客被挤到第二、第三页信噪比严重下降。AI 摘要Google 在许多结果顶部新增了 AI 生成的摘要。它偶尔有用但常常丢失关键细节、给出过度简化甚至错误的信息在用户和原始材料之间又加了一层。对精度要求很高的技术检索场景这些 AI 答案可能产生误导。隐私缺失每一次查询都被记录形成关于兴趣、工作模式和信息需求的详细画像用于广告定向和更多未知用途。搜索的便利以交出工作与生活的私密细节为代价。洞察我经常在搜索自己已经看过的页面促使作者动手解决问题的真正契机是这样一个观察自己经常在搜索已经访问过的页面——上周读过却忘了收藏的文档页、昨天评论过却记不清项目名的 GitHub issue、包含基础设施关键信息的内网 wiki。也就是说作者一直在把 Google 当作个人记忆的外包服务而且每次调用都要付出隐私代价更糟的是对于需要登录的内容内部工具、私有文档、私有仓库Google 根本无法索引自然也就帮不上忙。两种搜索发现型与回忆型把如何替代 Google这个问题想透之后作者得出了一个关于搜索本质的关键结论尽管我们在同一个搜索框里输入同样的查询实际做的事情其实分为两种截然不同的类型发现型搜索Discovery Search寻找从未遇到过的信息。这是真正的探索进入未知领域发现新资源学习不熟悉的主题。这类搜索确实需要 Google 那样的全互联网索引需要广撒网。回忆型搜索Recall Search找回已经遇到过的信息。不是在发现新东西而是在回忆在哪里见过它。典型场景包括上个月修的那个认证 bug……记得解决过问题但想不起确切解法、Bleve 文档里讲 result highlighter 的那一页……确定读过文档但记不清 URL 或章节标题、那篇讲 async/await 的 Stack Overflow 回答……记得有段解释特别清楚但没存链接。作者的关键判断是日常搜索中很大一部分很可能超过一半是回忆型搜索而不是发现型搜索。但 Google 的界面把两类搜索等同对待没有任何针对找回你自己的内容的优化对于登录墙或私有网络内的页面Google 根本无能为力。由此得出的解决方案呼之欲出为什么不做一个专门为回忆型搜索优化的工具——本地索引自己的全部浏览历史只在真正需要发现新信息时才回退到 Google潜在收益非常可观结果更快隐私更好能检索需要登录的内容结果针对个人兴趣与工作量身定制解决方案在本地索引一切一旦把问题说清楚答案就显而易见了能否在本地、私密地检索完整浏览历史——包括全文内容而不仅仅是 URL 和标题这将得到一个专门为回忆型搜索优化的个人搜索引擎同时在需要时仍可回退到 Google 做发现型搜索。作者先寻找过现成方案但没有一个能满足全部需求浏览器历史只保存 URL 和页面标题几乎无法按内容找页面Evernote、Notion 等笔记应用有网页剪辑功能但每保存一页都需要手动操作Omnom 等个人知识管理工具聚焦于精选笔记需要不断做该保存什么的有意识决策而非覆盖完整浏览历史。作者需要的是浏览器历史的全面自动捕获 搜索引擎的全文检索能力 本地软件的即时响应 自托管方案的隐私性的组合体。既然没有现成工具能满足全部条件作者决定自己构建——于是有了 Hister。需求清单作者的理想方案需要满足以下 11 项要求这也是理解 Hister 设计意图的最佳索引快速查找Fast lookup如果本地检索比 Google 还慢就永远不会用它。需要亚秒级响应和键盘快捷键让本地搜索比切换到 Google 更快。自动索引Automatic indexing不想手动保存页面、不想做任何有意识决策浏览时自动捕获工具应隐身在后台默默工作。认证感知索引Authentication aware indexing日常引用的大量内容在登录墙后面——内网 wiki、私有文档、认证 API 文档、内部仪表盘。任何无法处理认证内容的方案都会漏掉实际浏览的一大部分。全文搜索Full-text search检索页面正文而不是仅检索 URL 和标题。浏览器历史在记得读过关于 microservice authentication patterns 的东西但想不起是哪个博客或文档站的场景下毫无用处。强大的查询能力Powerful query capabilities布尔运算符AND/OR/NOT、字段限定检索只搜 URL 或只搜标题、通配符匹配以快速缩小结果范围。零认知负担Zero cognitive overhead无缝融入现有工作流自然贴合已经习惯的浏览与搜索方式。透明回退到在线搜索引擎Transparent fallback本地没搜到想要的内容时应能用同一个查询立即跳到 Google让迁移是渐进式的而不是工作流的彻底变更。可微调Fine-tuning capabilities黑名单屏蔽永远不想再看到的无关站点、给重要来源加权、为常见搜索创建关键字别名。已存内容的离线预览Offline preview即使原站点下线或页面被删除也能阅读已索引的页面偶尔能从链接失效link rot中救回内容。导入既有历史Import existing history希望从已有数年浏览数据已索引开始而不是花几个月从零积累索引。自由软件Free software自托管、无持续成本、无供应商锁定。浏览历史是自己的个人数据不应归公司所有。Hister把浏览历史变成个人搜索引擎Hister 是一个自托管self-hosted的网页历史管理工具核心理念是把你的浏览历史当作一个个人搜索引擎来对待。它在架构上分为 server 端索引、搜索、API与 client 端TUI 终端客户端、浏览器扩展、Web 界面、Qutebrowser companion 等下文结合仓库源码逐项验证上面的需求是如何落地的。亚秒级本地全文检索Bleve 驱动的索引与查询Hister 的索引层基于 Bleve查询的解析与构建位于 server/indexer/querybuilder 目录。builder.go中的Build函数把用户输入的字符串词法解析为 Bleve 查询对象多个关键词按AND 语义生成组合查询builder.go同时叠加一条整串的短语匹配查询来获得精确命中单个非字段限定词会自动追加一个高加权的url正则查询boost 100优先命中对应网站首页方便记住域名、忘了路径的场景builder.go。字段定义统一维护在 server/indexer/searchschema/schema.go 中包括domain、title、url、url_re、text、type、language、label、visits、updated、added、user_id等字段并声明了各字段的索引权重如 title 12、domain 8、url 4、text 1与默认搜索范围。客户端的搜索调用见 client/search.go它将indexer.Query序列化后请求/search接口——这正是快速查找要求中 TUI/浏览器扩展共用的一条路径。查询语言字段、短语、通配符与布尔逻辑需求 5强大的查询能力在 Hister 中体现为一套完整的查询语言完整指南见 查询语言文档。常用能力包括基本搜索直接输入词默认在标题、正文、URL、域名等所有默认字段中检索短语privacy policy匹配精确短语字段限定title:encryption、domain:github.com、url:*/security/*、language:en、visits:10..访问次数范围、updated:90d相对时间、updated:2026-04-01绝对日期、metadata.source:linkding元数据精确匹配、user_id:3多用户场景等通配符secur*、*privacy*字段内通配如domain:*.github.ioURL 正则url_re:^https?://([^/]\.)?example\.com/private/与索引规则共用 Goregexp.MatchString语义见 builder.go否定privacy -facebook、title:hister -url:*/issues/*或逻辑Alternation(security|privacy|encryption)、domain:(github.com|gitlab.com) title:security排序sort:date、sort:-date、sort:visits、sort:domain排序选项定义在 schema.go。词法层面parser.go 实现了带递归括号与引号处理的 tokenizer支持(|)或表达式、...短语、-否定前缀、\转义以及url_re:等字段中反斜杠的保留。自动索引浏览器扩展 抓取管道需求 2自动索引由浏览器扩展承担。扩展源码位于 webui/ext它只在浏览器本身已加载的页面中收集数据不会向正在访问的站点发起任何网络请求仅获取页面 favicon因此对目标网站完全透明。配合 server 端抓取与持久化管道server/crawler 目录下的 crawler、persistent、robots、proxy、bidi、chromedp、http 等组件新访问的页面会被自动索引为可检索文档。需求 3认证感知索引是架构上的一大优势索引发生在用户已登录的浏览器会话里因此登录墙后的内网 wiki、私有文档、认证 API 文档都能被索引——这是任何公开搜索引擎都无法做到的。规则与别名skip / priority / versioning需求 8可微调落地为 规则文档 中描述的四类规则单用户模式下保存在数据目录的rules.json多用户模式下按用户存储在数据库中Skip 规则URL 命中即静默丢弃、不入索引。典型用途广告网络、登录页、cookie 同意墙。例如^https://ads\.example\.com、^https?://(login|mail)\.example\.com/、.*\?utm_source。也可在 Web 界面对既有文档批量执行删除匹配文档。Priority 规则命中 URL 的文档无论相关度得分如何都会被大幅加权、推到结果顶部适合常驻显示个人 wiki、公司内部文档。例如^https://wiki\.example\.com/。Versioning 规则命中 URL 的文档在每次重新索引时与上一版本做 diff以 diff match patch 形式把 HTML 与文本变更存入数据库可查看变更历史并重建存档版本。适合监控隐私政策、文档、新闻页的改动对应需求 9 的离线预览与版本重建API 结构见 server/types/preview.go。别名Aliases查询时把关键字展开为完整查询例如gh: domain:github.com、work: domain:(internal.example.com|jira.example.com)之后输入work deployment等价于完整的域限定查询。规则模式的匹配要点源自 规则文档匹配目标是完整 URL含 scheme、host、path、query使用 Go 正则语法不支持 look-ahead/look-behind锚定必须包含 scheme^https://foo.com合法^foo.com不合法匹配前剥离 URL hash仅剔除utm_*查询参数带查询串的 URL 无法被尾部$锚定命中。客户端的规则管理 API 见 client/rules.go/api/rules与/api/add_alias、/api/delete_alias。导入既有历史与本地文件需求 10导入既有历史由 cmd 下的导入命令实现hister import支持导入浏览器历史、Linkwarden 书签等相关实现见 cmd/import_*.go、cmd/linkwarden.go并支持目录监听files/watcher.go把本地文件也纳入索引。这意味着你不需要从零开始——先导入多年数据索引立刻就有可用性。无缝工作流TUI、Web 界面与回退需求 6零认知负担与需求 7透明回退体现在多个入口上TUI 终端客户端cmd/tui提供键盘驱动的搜索界面无需离开终端即可检索本地索引Web 界面webui/app搜索页内置把当前查询转发给 DuckDuckGo / Google 等外部搜索引擎的按钮——本地没命中一键用同一查询去线上搜迁移成本趋近于零浏览器地址栏搜索把 Hister 实例注册为浏览器自定义搜索引擎后可在地址栏直接搜本地索引。运行方式见 快速入门启动./hister listenWindows 为.\hister.exe listen服务默认监听http://127.0.0.1:4433仅本机可访问适合单机个人使用之后安装 Chrome / Firefox 扩展Firefox 还支持移动端并确认扩展默认指向该地址即可。结果6 周内 Google 依赖下降约 50%使用 Hister 六周后作者复盘了自己的搜索行为约 50% 的 Google 搜索改为由本地索引直接回答找到了 Google 找不到的内容认证页面、已删除的内容零隐私顾虑无追踪、无画像针对个人需求的更好结果——因为这是我的历史。而且索引用得越多越好本地索引在常见查询上比 Google 更相关响应速度与打开新标签页相当覆盖了所有需要登录的服务变成了一部读过的一切的个人知识库。意外收益再发现Rediscovery找回了早已遗忘的有价值内容——两年前收藏却再没打开过的文章现在会在相关检索中出现学习模式Learning patterns观察自己的搜索记录能暴露知识盲区与兴趣走向离线访问Offline access文档站宕机或页面被删时内容依然在手配合 versioning 规则连页面历史版本都能追溯。使用前 vs 使用后使用 Google 时打开 Google → 搜 bleve query → 点第一个结果多半是错的→ 点第二个眼熟……→ 意识到以前来过 → 终于找到想要的页面。耗时约 12 分钟、510 次点击。使用 Hister 时打开 Hister → 输入 bleve query 回车 → 第一个结果就是上个月访问过的那一页。耗时约 5 秒、几次击键。结论找回你的搜索作者强调我们习惯性地把搜索等同于去 Google以至于忘了还有别的选择。但日常搜索的很大一部分并不需要整个互联网需要的是**我们的互联网**读过的页面、打开过的文档、每天在用的内部工具。Hister 的目标不是替代 Google 的发现能力而是替代 Google 的回忆能力——而在这个领域它天然优于 Google它知道 Google 永远看不到的认证页面它搜索的是你的历史而非整个网络它即时、私密、无广告并且越用越好。1.5 个月后 Google 依赖已减半随着索引增长这个数字还在继续上升。如果你也经常重复搜索自己已经找到过的信息可以这样开始按 安装文档 安装 Hister 二进制运行./hister listen启动本地服务安装浏览器扩展之后新访问的页面会自动进入索引通过 导入文档 一次性导入既有历史在 Web 界面或 TUI 中配置 skip / priority 规则与别名见 规则文档并熟悉 查询语言需要更定制化配置存储、认证、语义搜索、本地目录索引时参考 配置文档。作者也在持续推进 Hister 的未来路线易用性改进、基于索引与已打开结果的自动索引能力、以隐私安全的方式连接分布式搜索引擎、搜索结果导出、高级分析与搜索洞察。项目以 AGPLv3 开源接受社区贡献欢迎通过提交 issue、pull request尤其是 good first issues、改进文档等方式参与。最后更新2026 年 2 月【免费下载链接】histerYour own search engine项目地址: https://gitcode.com/GitHub_Trending/hi/hister创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考