尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
思源笔记 v3.7.1 版本解析:FTS5 外部内容模式索引重构与跨平台细节改进
思源笔记 v3.7.1 版本解析FTS5 外部内容模式索引重构与跨平台细节改进【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan思源笔记SiYuanv3.7.1 是一个以「改进细节」为主题的维护型版本在功能层面引入了siyuan://bazaarURI 打开集市资源说明、Markdown 导入对音频/视频标签的解析支持、通知开关配置以及空闲时自动索引修复在架构层面则完成了一项关键的内核改造——将全文搜索索引表blocks_fts迁移至 SQLite FTS5 的 external content外部内容模式与blocks表去重存储。阅读完本文你将理解这些变更的底层实现原理、对应的源码位置以及它们如何影响日常使用中的搜索、导入、多端同步与数据库体验。一、核心架构变更blocks_fts 采用 FTS5 外部内容模式v3.7.1 最值得关注的技术改动是「blocks_fts 使用 FTS5 外部内容模式以与 blocks 去重」——这不再是普通的体验优化而是对内核全文索引机制的实质性重构。1.1 什么是 FTS5 external content 模式在标准 FTS5 用法中虚拟表自身会物理存储一份列值副本导致同一份内容在blocks表与blocks_fts表中重复存放。而 external content 模式则通过建表声明指定外部内容来源表让 FTS5 只维护倒排索引inverted index列值仍由blocks表统一持有从而在数据层面实现去重。从 database.go 的建表代码可以看到这一模式的落地细节db.Exec(DROP TABLE IF EXISTS blocks_fts) // 采用 external content 模式blocks_fts 不再物理存储列值仅维护倒排索引 // 行内容由 blocks 表提供实现数据去重同时保留 UNINDEXED 标记的元数据列 db.Exec(CREATE VIRTUAL TABLE blocks_fts USING fts5(id UNINDEXED, parent_id UNINDEXED, ... contentblocks, content_rowidrowid, tokenize\ ftsTokenize() \))其中contentblocks声明外部内容表为blockscontent_rowidrowid指定两者通过行 ID 关联。索引重建同样遵循该模式INSERT INTO blocks_fts(blocks_fts) VALUES(rebuild)见 database.go而删除操作则通过DELETE FROM blocks_fts WHERE rowid IN (...)与blocks表联动见 database.go。1.2 写路径的顺序约束external content 模式对写入顺序有严格要求必须先写blocks_fts再写blocks。这一点在 block.go 的注释中明确记录external content 模式下blocks_fts 的写操作需以此为定位键。下列局部更新索引列的路径updateRootContent、updateBlockContent、indexNode须先写 blocks_fts、再写 blocks。具体实现如UPDATE blocks_fts SET content ?, fcontent ?, ial ? WHERE rowid ?见 block.go。该顺序保证 FTS5 在读取外部内容时始终能看到与索引一致的数据版本。1.3 性能基准验证仓库为此提供了专门的性能基准测试 fts_bench_test.go用于「量化写入/查询/重建开销」。测试中对比了两种模式见 fts_bench_test.go标准模式CREATE VIRTUAL TABLE blocks_fts USING fts5(...)与blocks成对写入insertBlocksStandardexternal content 模式CREATE VIRTUAL TABLE blocks_fts USING fts5(..., contentblocks, content_rowidrowid, ...)仅向 FTS 写入定位键列。这说明该改动经过了写入、查询、重建三个维度的基准测试验证而非简单的开关切换。从源码结构可以推断此重构的核心收益在于减少磁盘占用与写入放大同时保持查询能力不变。二、新功能逐个拆解从 URI 协议到导入解析2.1 通过 siyuan://bazaar URI 打开集市资源说明v3.7.1 支持通过siyuan://bazaar/{type}/{name}/readmeURI 直接打开集市资源的说明文档其中{type}为资源类型如plugins、widgets、icons、themes等{name}为资源名称。该能力由前端 URI 分发器实现见 uri.ts// siyuan://bazaar/plugins/plugin-sample/readme // siyuan://bazaar/plugins/plugin-sample/readme-installed const processSiYuanUriBazaar (app: App, uriObj: URL): boolean { const [, _type, _name, target] uriObj.pathname.split(/); ... switch (target) { case readme: case readme-installed: { // readme 打开集市中的在线说明readme-installed 打开已安装资源的本地说明 const from target readme-installed ? downloaded : bazaar; const {openBazaarReadme} await import(../config); openBazaarReadme(app, resourceType, resourceName, from); } } }两种目标行为如下URI 目标含义数据来源readme打开资源在集市中的说明集市在线数据from bazaarreadme-installed打开已安装资源的说明本地已下载数据from downloaded此外URI 中的资源名会先经过decodeURIComponent解码解码失败时安全返回false避免异常 URI 破坏分发流程。整套 URI 处理统一由processSiYuanUri按hostname分发见 uri.tsbazaar正是其中一个分支。2.2 Markdown 导入解析 audio/video 标签此前在导入标准 Markdown 时audio与video标签会被识别为 HTML 块而非音视频块。v3.7.1 修复了这一问题实现位于 import.go。其实现思路是由于 Markdown 导入使用的是NewStdLute且未启用 Protyle WYSIWYGlute 不会将这两个标签解析为音视频块因此在导入完成后通过htmlBlock2Media将标签整体识别出来并还原为对应的音频/视频块// htmlBlock2Media 将导入标准 Markdown 时被识别为 HTML 块的 audio/video 还原为音频/视频块。 if bytes.HasPrefix(lower, []byte(audio)) bytes.HasSuffix(tokens, []byte()) { ... } else if bytes.HasPrefix(lower, []byte(video)) bytes.HasSuffix(tokens, []byte()) { ... }对用户而言导入含音视频标签的 Markdown 文档后内容会以正确的媒体块形态呈现可直接播放与管理资源。2.3 支持设置通知开关本版本新增外观通知开关配置支持按通知类型分别控制是否展示。配置结构定义在 appearance.goNotifications *util.Notifications json:notifications // 外观通知开关配置默认配置由NewNotifications()统一生成全部启用见 appearance.go// Notifications 外观通知开关配置。 // Appearance.Notifications 为 nil 时表示旧配置尚未迁移整体按默认启用处理。 type Notifications struct { ... } // NewNotifications 创建默认全部启用的通知配置。新增内置通知时在此统一调整默认值避免多处分散。 func NewNotifications() *Notifications { return Notifications{ ... } }该配置在应用层setting.go与内核启动阶段conf.go都会做 nil 迁移处理即旧版本配置升级后不会因缺字段而失效。通知开关在文档树列表、标签列表等场景均有对应消费逻辑见 filetree.go 与 tag.go。2.4 空闲时自动执行索引修复针对部分设备偶发的索引异常v3.7.1 引入了空闲时段自动索引修复机制当应用处于空闲状态时内核会在后台对索引数据进行一致性修复从而降低手动重建索引的频率。该能力与上一节所述 FTS5 索引重构共同服务于搜索与文档树可靠性的提升。三、桌面端与 Electron 相关改进3.1 Electron 停用混合内容的自动 HTTPS 升级Electron 应用默认会对混合内容HTTPS 页面中的 HTTP 子资源尝试自动升级到 HTTPS但在部分场景下会导致资源加载失败。v3.7.1 禁用了该自动升级行为让页面按原始协议加载资源避免因升级失败引发的功能异常相关修改见 electron 目录下的主进程配置。3.2 Microsoft Store 版本隐藏自动更新选项由于 Microsoft Store 分发的应用由商店渠道统一管理更新内核自带的自动更新逻辑与之冲突。v3.7.1 在 Microsoft Store 版本中隐藏了「自动更新」设置项避免用户误操作导致更新机制错乱。3.3 编辑器与拖放体验支持从左侧、右侧和底部内边距拖曳选取此前仅支持从内边距顶部区域开始拖选本版本扩展至左、右、底部提升了选区操作的容错性将区块拖曳到浮动文档树时停靠面板未出现修复了拖放过程中 Dock 面板响应缺失的问题在带固定表头的表格中输入数据不再重设滚动位置修复了固定表头场景下输入导致视口回跳的体验问题通过编辑器中的块引用创建新文档的改进优化了块引用转新文档的流程块引用锚文本未变更时跳过持久化引用文档这是一个性能优化——当块引用的锚文本没有实际变化时不再重复持久化引用关系减少无谓的写入开销将列表区块转换为段落后再撤销出现异常修复了该转换-撤销链路的异常。四、移动端与平台适配修复移动端iOS / Android / HarmonyOS在本版本获得了一批针对性修复变更影响平台说明横向超级区块中的栏位占满全宽移动端修复横向布局下栏位宽度不足的问题改进左侧栏顶栏移动端顶栏交互与视觉优化桌面模式时弹出屏幕键盘HarmonyOS / Android桌面模式布局下自动唤起软键盘长按并垂直滚动不再触发多选模式移动端区分长按与滚动手势闪卡中缺少区块标且 iPhone 无法延伸选取移动端修复闪卡区块标缺失与选区扩展问题从右到左选取文字意外关闭设置页面iPhone修复设置页文本反选触发页面关闭的问题iOS 分享面板缺少思源iOS补齐分享面板入口iOS 上图片不显示iOS修复图片渲染异常部分 Android/iOS 设备的索引问题Android / iOS修复索引初始化异常其中「删除未完成的拼音时游标意外跳到其他单元格」为 macOS 专属修复针对输入法拼音编辑状态下光标跳转异常的问题。五、缺陷修复清单数据库、PDF 与安全5.1 数据库相关修复数据库分组后无法新增字段修复分组视图下字段新增入口失效的问题数据库滚动加载相关问题修复大数据量下滚动加载的异常数据库建立时间字段筛选不生效修复基于Created time字段的筛选逻辑两设备同时开启时数据库视图无法同步修复多端并发场景下视图同步失败的问题。以上修复集中在属性视图Attribute View相关内核模块见 kernel/av 目录下的filter.go、group.go、layout.go等实现说明 v3.7.1 对数据库功能进行了系统性加固。5.2 PDF 搜索与启动问题无法在 PDF 文件中搜索文字修复了 PDF 文本检索失效的问题。PDF 相关的链接注释能力由 pdf.go 提供PdfListLinks、PdfListToCLinks搜索链路涉及 PDF 解析与索引的配合某些情况下启动时卡在「Finishing boot」修复了启动阶段偶发阻塞保证引导流程boot可正常完成。5.3 界面与其他修复区块标菜单在窗口左边缘处被裁剪修复弹出菜单位置计算修复一些安全漏洞本版本包含安全修复项建议及时升级。六、文档更新与下载6.1 新增工作空间文件系统布局文档v3.7.1 同步新增了「工作空间文件系统布局」文档WORKSPACE.zh-CN.md系统性地说明了思源工作空间目录中各子目录如data/、conf/、temp/、backup/等的职责与布局为数据管理、备份迁移与故障排查提供了权威参考。6.2 获取 v3.7.1本版本可通过以下方式获取B3log 官网下载访问思源官方下载页获取各平台安装包GitHub Releases通过项目 Release 页面下载对应版本内核源码内核侧实现位于 kernel 目录前端实现位于 app/src 目录可自行构建验证。总结思源笔记 v3.7.1 在「小而精」的细节改进之外完成了一次值得关注的内核升级blocks_fts迁移到 FTS5 external content 模式配合空闲自动索引修复从数据冗余与索引一致性两个层面加固了全文搜索的地基同时以siyuan://bazaarURI、Markdown 音视频导入、通知开关等能力扩展了可编程性与导入兼容性并在数据库、PDF、移动端多平台完成了一轮系统性缺陷修复。对于自托管用户而言升级本版本即可同时获得存储优化、可靠性提升与安全修复属于建议及时跟进的小版本。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

WorkBuddy实战:从聊天AI到会干活的AI工作台

WorkBuddy实战:从聊天AI到会干活的AI工作台

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/11 13:34:13
Python编程入门:第一次作业实战指南

Python编程入门:第一次作业实战指南

1. Python第一次作业:从零开始的编程初体验 刚接触Python编程的新手们,第一次作业往往既兴奋又迷茫。作为一门以简洁优雅著称的编程语言,Python的入门门槛相对较低,但这并不意味着可以掉以轻心。我的第一次Python作业是在大学二年…

📅 2026/9/11 13:34:13
音视频系统国产化实践:从硬件到算法的全链路改造

音视频系统国产化实践:从硬件到算法的全链路改造

1. 音视频分布式系统国产化的时代背景2020年以来,全球科技产业格局发生深刻变革,音视频领域的基础设施安全受到前所未有的关注。我们团队在搭建超大规模实时互动平台时,曾因国外编解码器授权问题导致项目延期三个月,这次经历让我们…

📅 2026/9/11 13:29:12
MORE NEWS

更多资讯

📰

设备低功耗开发:从功耗链路建模到唤醒事件治理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

上下文污染排查:为什么打开无关文件会降低 AI 补全准确率

上下文污染排查:为什么打开无关文件会降低 AI 补全准确率很多使用现代 AI 代码编辑器(如 Cursor、GitHub Copilot、Continue)的工程师常常会遇到一个令人困惑的现象:“上午刚开工时,AI 的代码补全又快又准,…

📰

技术调研报告的标准模板:从背景、选型矩阵到落地演进路径

技术调研报告的标准模板:从背景、选型矩阵到落地演进路径在技术团队的日常决策中,“技术调研(Technical Investigation / Spike)”是最基础也是最考验工程师综合功力的任务。 很多初中级工程师在撰写技术调研报告时,最…

📰

Spring容器核心机制与最佳实践解析

1. Spring容器核心概念解析 Spring容器作为Java企业级开发的核心基础设施,本质上是一个实现了控制反转(IoC)原则的运行时环境。我初次接触Spring时,最震撼的是它彻底改变了传统Java对象的管理方式——开发者不再需要手动维护对象间…

📰

内存泄露 Bug 的自动定位:基于 pprof 采样结果与 AI 堆栈分析

内存泄露 Bug 的自动定位:基于 pprof 采样结果与 AI 堆栈分析 在 Go 语言编写的后台长期运行微服务中,内存泄露(Memory Leak)往往是最折磨工程师的“慢性毒药”。它不像空指针解引用那样会立即触发 panic 并留下清晰的堆栈&#x…

📰

使用 Helm 在 Kubernetes 上部署 Cognee:内置 PostgreSQL + pgvector 的完整指南

使用 Helm 在 Kubernetes 上部署 Cognee:内置 PostgreSQL pgvector 的完整指南 【免费下载链接】cognee Cognee is the open-source AI memory platform for agents. Give your AI agents persistent long-term memory across sessions with a self-hosted knowled…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬