{
    "version": "https://jsonfeed.org/version/1",
    "title": "I-notes 博客",
    "home_page_url": "https://blog.ixsay.com",
    "feed_url": "https://blog.ixsay.com/feed.json",
    "description": "vitepress,blog,blog-theme",
    "icon": "https://blog.ixsay.com/favicon.ico",
    "items": [
        {
            "id": "https://blog.ixsay.com/posts/progress.html",
            "content_html": "<h1 id=\"项目开发进度日志-progress-md\" tabindex=\"-1\">项目开发进度日志 (progress.md) <a class=\"header-anchor\" href=\"#项目开发进度日志-progress-md\" aria-label=\"Permalink to &quot;项目开发进度日志 (progress.md)&quot;\">&ZeroWidthSpace;</a></h1>\n<h2 id=\"已完成\" tabindex=\"-1\">已完成 <a class=\"header-anchor\" href=\"#已完成\" aria-label=\"Permalink to &quot;已完成&quot;\">&ZeroWidthSpace;</a></h2>\n<ul>\n<li>[x] <strong>排查中文搜不出结果的根本原因</strong>：之前使用连续中文匹配正则 <code>[\\u4e00-\\u9fa5]+</code> 将整句话作为单一 token 存入索引，导致非句首关键词无法通过前缀匹配检索到。</li>\n<li>[x] <strong>实现现代化混合多粒度中文分词器（Intl.Segmenter + 连续词组 + 单字索引）</strong>：\n<ol>\n<li>调用现代 JS 原生 <code>Intl.Segmenter</code> 提取自然中文词汇（如“系统”、“架构”、“设计”、“干净”）；</li>\n<li>结合英文单词正则提取与 2~10 字连续词组提取；</li>\n<li>补充单汉字索引，保证无论搜单字、复合词还是专业术语都能 100% 准确命中；</li>\n<li>配合 Mark.js 长词优先匹配机制，确保高亮时连续整词标黄，绝不产生零散破碎色块。</li>\n</ol>\n</li>\n<li>[x] <strong>解决多级标题每次被当作独立文章重复出现的问题</strong>：\n<ul>\n<li>文章建立唯一的顶级主条目（<code>boost.title = 8</code>）；</li>\n<li>降低子小节 <code>titles</code> 权重（<code>0.1</code>），搜标题时仅出现文章主卡片。</li>\n</ul>\n</li>\n<li>[x] <strong>正文文本摘要提取机制验证与排查</strong>：\n<ul>\n<li>明确 VitePress 原生内置 <code>detailedView: true</code>（正文摘要模式 / Excerpt）；</li>\n<li>阐明分章节锚点（Anchor）提取、Mark.js 自动聚焦命中词段落并高亮展示的技术底层；</li>\n<li>优化 CSS 摘要容器 <code>.excerpt-wrapper</code>、<code>.excerpt</code> 与暗黑模式支持。</li>\n</ul>\n</li>\n<li>[x] <strong>构建验证</strong>：执行 <code>npm run build</code>，成功编译通过（3.34s），验证索引与正文摘要逻辑正常运行。</li>\n</ul>\n<hr>\n<h2 id=\"架构字典\" tabindex=\"-1\">架构字典 <a class=\"header-anchor\" href=\"#架构字典\" aria-label=\"Permalink to &quot;架构字典&quot;\">&ZeroWidthSpace;</a></h2>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th style=\"text-align:left\">文件路径</th>\n<th style=\"text-align:left\">说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:left\">[.vitepress/config.ts](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/config.ts)</td>\n<td style=\"text-align:left\">VitePress 核心配置文件，包含主题、导航、MiniSearch 本地搜索（混合多粒度中文分词器、分段策略、搜索权重 Boost、<code>detailedView</code> 正文摘要视图）等配置</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">[.vitepress/theme/custom.css](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/theme/custom.css)</td>\n<td style=\"text-align:left\">主题全局与组件样式表，包含全新的现代精致搜索弹窗样式（<code>.VPLocalSearchBox</code>、<code>.excerpt</code> 正文摘要渐变定位与 <code>mark</code> 关键词高亮）、暗色模式适配及全局重置</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">[.vitepress/theme/serverUtils.ts](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/theme/serverUtils.ts)</td>\n<td style=\"text-align:left\">服务端工具方法，用于读取所有文章元数据、排序并生成分页 Markdown 文件</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">[.vitepress/theme/date.ts](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/theme/date.ts)</td>\n<td style=\"text-align:left\">日期解析与格式化工具函数</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">[.vitepress/theme/functions.ts](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/theme/functions.ts)</td>\n<td style=\"text-align:left\">页面初始化与通用函数</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">[.vitepress/theme/pagination.ts](file:///D:/Users/A/Desktop/VitepressBlog/.vitepress/theme/pagination.ts)</td>\n<td style=\"text-align:left\">分页数据处理函数</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"函数字典目录\" tabindex=\"-1\">函数字典目录 <a class=\"header-anchor\" href=\"#函数字典目录\" aria-label=\"Permalink to &quot;函数字典目录&quot;\">&ZeroWidthSpace;</a></h2>\n<h3 id=\"vitepress-config-ts\" tabindex=\"-1\"><code>.vitepress/config.ts</code> <a class=\"header-anchor\" href=\"#vitepress-config-ts\" aria-label=\"Permalink to &quot;`.vitepress/config.ts`&quot;\">&ZeroWidthSpace;</a></h3>\n<ul>\n<li><strong><code>_splitIntoSections(file: string, html: string)</code></strong>：自定义 MiniSearch 页面分段函数。为每篇文章生成 1 个高权重的主文档条目（代表文章整体），并仅对包含实质正文且 anchor 唯一的子小节生成精准跳转索引，同时为每个小节挂载实质 text 供正文检索和摘要提取。</li>\n<li><strong><code>tokenize(str: string)</code></strong>：现代化混合多粒度中文分词函数，基于 <code>Intl.Segmenter</code> 自然语义词组 + 连续词块 + 单字覆盖，确保任意中文词汇精准检索与整词连续高亮。</li>\n</ul>\n<h3 id=\"vitepress-theme-serverutils-ts\" tabindex=\"-1\"><code>.vitepress/theme/serverUtils.ts</code> <a class=\"header-anchor\" href=\"#vitepress-theme-serverutils-ts\" aria-label=\"Permalink to &quot;`.vitepress/theme/serverUtils.ts`&quot;\">&ZeroWidthSpace;</a></h3>\n<ul>\n<li><strong><code>getPosts(pageSize: number)</code></strong>：扫描 <code>posts/</code> 目录下全部 md 文件，提取 frontmatter 元数据并按日期/权重排序，触发分页生成。</li>\n<li><strong><code>generatePaginationPages(total: number, pageSize: number)</code></strong>：生成 <code>page_*.md</code> 分页文件及首页 <code>index.md</code>，并在 frontmatter 中标注 <code>search: false</code>。</li>\n<li><strong><code>_compareDate(obj1, obj2)</code></strong>：文章排序比较器，优先对比 order，次之对比发布日期。</li>\n<li><strong><code>_convertOrder(input)</code></strong>：安全转换文章权重 order 为数字。</li>\n</ul>\n<h3 id=\"vitepress-theme-date-ts\" tabindex=\"-1\"><code>.vitepress/theme/date.ts</code> <a class=\"header-anchor\" href=\"#vitepress-theme-date-ts\" aria-label=\"Permalink to &quot;`.vitepress/theme/date.ts`&quot;\">&ZeroWidthSpace;</a></h3>\n<ul>\n<li><strong><code>convertDateV2(date)</code></strong>：将各种格式的日期解析并格式化为标准时间戳或字符串。</li>\n</ul>\n<hr>\n<h2 id=\"错误-交互日志\" tabindex=\"-1\">错误/交互日志 <a class=\"header-anchor\" href=\"#错误-交互日志\" aria-label=\"Permalink to &quot;错误/交互日志&quot;\">&ZeroWidthSpace;</a></h2>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th style=\"text-align:left\">阶段 / 命令</th>\n<th style=\"text-align:left\">发现问题 / 控制台信息</th>\n<th style=\"text-align:left\">解决方案</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:left\">中文搜索失效</td>\n<td style=\"text-align:left\"><code>[\\u4e00-\\u9fa5]+</code> 把一整句中文当成一个 Token，导致非句首词汇无法被 MiniSearch 前缀匹配命中。</td>\n<td style=\"text-align:left\">引入原生 <code>Intl.Segmenter</code> + 词组 + 单字多粒度混合分词，确保所有词汇与单字均可被检索。</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">标题冗余排查</td>\n<td style=\"text-align:left\">搜索标题关键词时，因为所有子小节的 <code>titles</code> 都继承了主标题，导致一篇文章的全部子标题都作为独立结果涌入列表。</td>\n<td style=\"text-align:left\">将文章主条目设为高权重，降低子小节 <code>titles</code> 权重（0.1），搜标题时仅出现文章主卡片。</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">MiniSearch ID 重复</td>\n<td style=\"text-align:left\">构建时报错 <code>duplicate ID /pages/about.html#about-me</code>。</td>\n<td style=\"text-align:left\">文章主条目使用空 anchor（代表文件本身），各子小节使用唯一 anchor 并进行 <code>seenAnchors</code> 集合去重。</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">构建验证 <code>npm run build</code></td>\n<td style=\"text-align:left\">构建通过，耗时约 3.34s，索引与正文摘要逻辑正常运行。</td>\n<td style=\"text-align:left\">验证通过。</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h2 id=\"关联映射\" tabindex=\"-1\">关联映射 <a class=\"header-anchor\" href=\"#关联映射\" aria-label=\"Permalink to &quot;关联映射&quot;\">&ZeroWidthSpace;</a></h2>\n<ul>\n<li><code>中文搜索失效 -&gt; config.ts 升级为 Intl.Segmenter + 混合多粒度分词器</code></li>\n<li><code>中文整词高亮 -&gt; 词组长词优先匹配 -&gt; Mark.js 连贯标黄不破碎</code></li>\n<li><code>多级标题去重 -&gt; 结构化分层 + boost 权重精调 (title:8, text:4, titles:0.1)</code></li>\n<li><code>正文匹配摘要提取 -&gt; config.ts 配置 detailedView: true + custom.css 优化 .excerpt 样式与自动定位</code></li>\n</ul>\n",
            "url": "https://blog.ixsay.com/posts/progress.html",
            "title": "项目开发进度日志",
            "summary": "这是一个被删除的示例",
            "date_modified": "2026-08-27T00:00:00.000Z",
            "author": {
                "name": "I-notes 博客",
                "url": "https://blog.ixsay.com"
            },
            "tags": [
                "sample"
            ]
        }
    ]
}