
degoog Indexer深度解析SQLite/PostgreSQL双后端让你的搜索历史变成第二个搜索引擎【免费下载链接】degoogSearch engine aggregator with a comprehensive plugin/extension system项目地址: https://gitcode.com/gh_mirrors/de/degoogdegoog是一款可高度定制的搜索引擎聚合器search aggregator它内置的Indexer索引器是本文的主角它会默默记录你搜索过的结果把 URL、查询词、点击位置存进本地数据库下次再用相似关键词搜索时degoog 能直接把你曾经看到过的好结果捞出来相当于给你的聚合搜索装上一个私有记忆 第二搜索引擎。整个系统支持SQLite / PostgreSQL 双后端个人单机用 SQLite 零配置高流量公开实例切 Postgres 即可无需改一行代码。一、Indexer 解决了什么问题普通搜索聚合器每次都是现查同一个问题搜十次结果基本一样而且你上次看到过、觉得不错的链接换个措辞就找不回来了。degoog 的 Indexer 的思路是把每次搜索结果当成数据资产存下来。记录每个 URL 的标题、摘要、缩略图、来源引擎、出现位置记录哪个查询词、在哪个引擎类型下、命中过这个 URL、排在第几位再次搜索时优先返回历史中排名靠前的 URL再补上模糊匹配的新内容。也就是说用得越久degoog 越懂你——它成了你个人使用习惯的第二个搜索引擎。二、数据模型URL、查询词与命中记录Indexer 的核心是三张表以 SQLite 为例Postgres 结构等价定义在 schema.ts表存什么作用urls去重后的 URL、标题、摘要、缩略图、媒体信息你的资源库同一 URL 只存一份query_hits查询词 引擎类型 URL 最佳排名 命中次数你的搜索历史评分表urls_ftsFTS5 全文索引标题/摘要/URL支撑模糊搜索的倒排索引几个精巧的细节URL 去重写入时按规范化后的 URL 冲突检测已存在就只刷新last_seen并自动保留更长的标题和摘要见 statements.ts 中的UPSERT_URL排名记忆每次命中都会更新best_position取历史最优位置和hit_count命中次数搜索历史里出现次数多、排名靠前的结果天然排在前面全文索引自动维护通过触发器在urls增删改时同步urls_fts保证模糊搜索索引始终最新。三、写入流水线先排队、后批量、自动清理Indexer 的写入并不阻塞搜索响应而是一条异步流水线核心在 queue.ts筛选每次搜索完成后maybeIndex挑出值得索引的结果跳过已被索引召回的结果避免自我循环逻辑见 record.ts排队行数据先进内存队列每 3 秒批量落库一次失败自动回排队重试且每个类型最多缓存 1 万行防止内存膨胀清理每 5 分钟跑一轮prune按你在设置里配置的容量上限最大 URL 数、最大命中数、最大保留天数淘汰冷数据。这套设计保证了搜索体验零卡顿磁盘占用可控历史记录只留热的部分。相关参数degoogIndexerMaxUrls、degoogIndexerMaxAgeDays等的解析逻辑见 load.ts。四、三种检索策略精确 → 模糊 → 子串当你再次搜索时query.ts 的queryIndex会按优先级组合三路召回精确匹配Exact查询词和历史记录完全一致时直接按平均排名升序、命中次数降序取出历史最优结果——这是记忆引擎的主力模糊匹配Fuzzy走 FTS5 全文索引查询构造见 fts.ts把关键词拆词后做多词前缀匹配并用至少命中 N 个词的比例阈值过滤噪音专治换个说法搜不到子串匹配Substring对无空格脚本如中文做instr子串扫描兜底 FTS 覆盖不到的情况。三路结果去重后合并上限由degoogIndexerQueryLimit控制。这就是为什么 degoog 用一段时间后搜索结果里会出现带特殊标记的历史推荐——那是它从你私有索引里捞回来的宝贝。五、SQLite / PostgreSQL 双后端怎么选后端选择完全由环境变量驱动解析逻辑在 pg-config.ts工厂在 factory.ts场景后端配置方式个人使用、低流量SQLite默认什么都不配开箱即用数据文件在本地data目录高流量公开实例PostgreSQL设置DEGOOG_POSTGRES连接串或DEGOOG_POSTGRES_HOST等分项变量两者差异在哪SQLite 适配器adapters/sqlite/WAL 模式提升并发读写FTS5 提供全文检索单文件数据库迁移备份都极其方便Postgres 适配器adapters/postgres/并发写入扩展性更强FTS 能力更完整适合多人共享、索引量大的公开实例官方还提供了现成的 postgres.yml 与 full.yml 编排文件对上层业务完全透明两套适配器实现同一个接口应用代码无需感知当前跑在哪个后端上。一句话建议个人自托管默认 SQLite要开公开实例、多人共用索引再上 Postgres。六、实用设置建议新手向在设置的 Indexer 面板对应 tab.ts中推荐新手这样配置先开degoogIndexerEnabled什么都不调用默认值跑一周感受记忆引擎的效果控制容量公开实例建议设置degoogIndexerMaxUrls/degoogIndexerMaxHits上限配合自动 prune 防止磁盘爆满域名黑白名单通过degoogIndexerDomainBlocklist过滤掉论坛、社交站等噪音域名让索引更干净模糊搜索比例degoogIndexerFuzzyMinTermRatio默认 0.6想要更严格的匹配就调高想要更多意外惊喜就调低。写在最后degoog 的 Indexer 用一套非常克制的架构实现了搜索历史 → 私有搜索引擎的跃迁三张表 一条异步流水线 三路召回双后端无缝切换。它的源码都放在 src/server/indexer/配套测试覆盖在 tests/indexer/如果你想深入阅读实现细节这是一个非常适合作为入门的模块。用得越久你的 degoog 就越像一个懂你的搜索引擎——这正是它作为聚合器之外最独特的一点。【免费下载链接】degoogSearch engine aggregator with a comprehensive plugin/extension system项目地址: https://gitcode.com/gh_mirrors/de/degoog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考