Skip to content

Latest commit

 

History

History
268 lines (209 loc) · 9.48 KB

File metadata and controls

268 lines (209 loc) · 9.48 KB

Context

Filename: search-task.md Created On: 2024-06-08 Created By: Claude AI Associated Protocol: RIPER-5 + Multidimensional + Agent Protocol

Task Description

为Docusaurus网站添加搜索功能

Project Overview

这是一个使用Docusaurus v3.6.3构建的文档网站,目前没有搜索功能。需要添加一个适合的搜索解决方案,使用户能够方便地搜索网站中的内容。


The following sections are maintained by the AI during protocol execution

Analysis (Populated by RESEARCH mode)

项目配置信息

  • Docusaurus版本:3.6.3
  • 使用的预设:classic
  • 已有配置:文档、博客、主题
  • 语言:配置为英文(defaultLocale: 'en'),但实际内容为中文
  • 曾经尝试过的搜索插件:@aldridged/docusaurus-plugin-lunr(已注释)

文档内容分析

  • 文档内容主要是中文
  • 项目名称为ESBoot,是一个前端工程化工具集
  • 文档结构包含文档(docs)和API参考(api)

Docusaurus搜索解决方案对比

Docusaurus官方支持几种添加搜索功能的方式:

  1. Algolia DocSearch

    • 优点:免费托管服务,索引质量高,响应快
    • 缺点:需要申请,可能等待时间长,有使用条件限制
    • 适用:中大型开源项目
  2. 本地搜索插件(如docusaurus-search-local)

    • 优点:无需外部依赖,设置简单,适合中小型网站
    • 缺点:对大型网站性能可能有影响
    • 适用:中小型项目,不希望依赖外部服务
  3. @easyops-cn/docusaurus-search-local

    • 优点:功能完善,支持中文搜索,支持离线搜索,可本地化
    • 缺点:需要额外的构建时间
    • 适用:需要中文搜索和离线搜索功能的项目
  4. docusaurus-lunr-search

    • 优点:轻量级,易于配置
    • 缺点:功能相对简单,中文支持有限
    • 适用:小型文档项目
  5. docusaurus-theme-search-typesense

    • 优点:性能好,可自定义性强
    • 缺点:需要自行托管Typesense服务
    • 适用:需要自定义搜索体验的项目

项目需求分析

  • 需要搜索文档和博客内容
  • 需要良好的中文搜索支持(文档内容主要是中文)
  • 最好无需外部服务依赖(便于维护)
  • 安装配置简单(避免复杂设置)

Proposed Solution (Populated by INNOVATE mode)

根据项目分析,我们将评估三种可能的搜索解决方案:

方案1:使用 @easyops-cn/docusaurus-search-local

这个方案使用 @easyops-cn/docusaurus-search-local 插件,它是专为 Docusaurus 设计的本地搜索解决方案,具有良好的中文支持。

优势:

  • 完全客户端解决方案,无需外部服务
  • 具有良好的中文分词和搜索支持
  • 支持语言特定的搜索(可以优化中文搜索体验)
  • 开箱即用的UI组件,与Docusaurus主题完美集成
  • 支持离线搜索,适合内部文档使用
  • 安装简单,配置灵活

劣势:

  • 对于非常大型的网站,构建时间可能会增加
  • 搜索索引会增加客户端的初始加载时间(但可配置懒加载)

技术实现:

  1. 安装插件:npm install --save @easyops-cn/docusaurus-search-local
  2. 在 docusaurus.config.ts 中添加插件配置
  3. 可以针对中文搜索进行优化配置

方案2:配置 Algolia DocSearch

Algolia DocSearch 是 Docusaurus 官方推荐的搜索解决方案,提供免费的托管搜索服务。

优势:

  • 由专业团队维护的高质量搜索体验
  • 搜索性能极佳,结果精准
  • 不增加构建时间和客户端负担
  • 支持中文搜索(需要合理配置)
  • 集成 Docusaurus 主题

劣势:

  • 需要申请和配置(可能需要等待)
  • 依赖外部服务
  • 需要网站是公开的且符合条件
  • 更新索引有时间延迟

技术实现:

  1. 向 Algolia DocSearch 项目提交申请
  2. 获取 API 密钥后配置 docusaurus.config.ts
  3. 可能需要额外配置爬虫以优化中文内容索引

方案3:集成 FlexSearch 实现自定义本地搜索

此方案基于 FlexSearch(一个高性能的全文搜索库)实现自定义搜索功能,通过配置优化中文搜索。

优势:

  • 完全可定制的搜索体验
  • 针对中文内容优化的灵活配置选项
  • 无需依赖外部服务
  • 可以实现更复杂的搜索功能(如分类搜索)

劣势:

  • 需要更多的开发工作来实现和维护
  • 可能需要自行处理UI组件
  • 对Docusaurus插件知识有更高要求

技术实现:

  1. 安装 FlexSearch:npm install flexsearch
  2. 创建自定义主题组件实现搜索界面
  3. 在构建时生成搜索索引
  4. 集成到 Docusaurus 主题

推荐方案

综合考虑项目需求和各方案优劣,推荐使用方案1:@easyops-cn/docusaurus-search-local,因为:

  1. 它提供了良好的中文搜索支持
  2. 无需依赖外部服务,易于维护
  3. 安装和配置简单
  4. 与Docusaurus主题完美集成
  5. 可以针对中文内容进行优化配置

该方案最适合当前项目的需求,能够快速实现高质量的中文文档搜索功能,且维护成本低。

Implementation Plan (Generated by PLAN mode)

下面是为Docusaurus网站添加@easyops-cn/docusaurus-search-local搜索功能的详细实施计划:

[文件修改计划]

  • 文件:package.json - 添加新依赖
  • 文件:docusaurus.config.ts - 添加和配置插件
  • 文件:.gitignore - 确保搜索索引文件被忽略(如需要)

详细步骤

步骤1:安装搜索插件

我们需要安装@easyops-cn/docusaurus-search-local插件包。

  • 文件:无(命令行操作)
  • 原因:添加搜索功能所需的插件包
  • 命令:pnpm add @easyops-cn/docusaurus-search-local

步骤2:备份配置文件

在进行配置更改前,先备份docusaurus.config.ts文件,以防配置有问题需要回滚。

  • 文件:无(命令行操作)
  • 原因:安全起见,备份原始配置
  • 命令:cp docusaurus.config.ts docusaurus.config.ts.bak

步骤3:修改Docusaurus配置

修改docusaurus.config.ts文件,添加搜索插件配置,以支持中文搜索。

  • 文件:docusaurus.config.ts
  • 原因:配置搜索插件
  • 修改:添加搜索插件配置
    // 在plugins数组中添加如下配置
    plugins: [
      // 其他插件配置(如有)...
      [
        '@easyops-cn/docusaurus-search-local',
        {
          // 索引的语言配置
          hashed: true, // 生成一个唯一的搜索索引文件
          language: ["en", "zh"], // 同时支持英文和中文搜索
          highlightSearchTermsOnTargetPage: true, // 高亮目标页面上的搜索词
          docsRouteBasePath: ['/docs', '/api'], // 设置文档的基本路径,确保API文档也被索引
          indexDocs: true, // 索引文档页面
          indexBlog: true, // 索引博客页面
          indexPages: true, // 索引常规页面
          searchResultLimits: 8, // 搜索结果数量限制
          searchResultContextMaxLength: 50, // 搜索结果上下文最大长度
          translations: {
            "search_placeholder": "搜索文档",
            "see_all_results": "查看所有结果",
            "no_results": "没有找到结果",
            "search_results_for": "搜索 \"{{ keyword }}\" 的结果",
            "search_the_documentation": "搜索文档",
            "count_documents_found": "找到 {{ count }} 个文档",
            "count_documents_found_plural": "找到 {{ count }} 个文档",
            "no_documents_were_found": "没有找到文档"
          }
        }
      ],
    ],

步骤4:构建项目以验证配置

构建项目,确认搜索插件配置无误,并生成搜索索引。

  • 文件:无(命令行操作)
  • 原因:验证配置并生成搜索索引
  • 命令:pnpm run build

步骤5:本地测试搜索功能

启动本地开发服务器,测试搜索功能是否正常工作。

  • 文件:无(命令行操作)
  • 原因:验证搜索功能
  • 命令:pnpm run dev

步骤6:调整搜索配置(如需)

根据测试结果,可能需要调整搜索插件的配置参数,以优化搜索体验。

  • 文件:docusaurus.config.ts
  • 原因:根据测试结果优化搜索配置
  • 修改:可能需要调整上述配置中的参数,如搜索结果数量、索引范围等

步骤7:更新.gitignore文件

确保搜索索引文件不会被版本控制跟踪(如果生成在项目目录中)。

  • 文件:.gitignore
  • 原因:避免搜索索引文件被提交到代码仓库
  • 修改:添加以下内容(如果不存在)
    # 搜索索引文件
    .docusaurus/*.search.*
    

步骤8:重新构建和部署

完成配置后,重新构建项目并部署到生产环境。

  • 文件:无(命令行操作)
  • 原因:生成最终的搜索索引并部署网站
  • 命令:
    pnpm run build
    pnpm run deploy  # 或者您使用的部署命令
    

实施清单

实施清单汇总所有需要执行的步骤:

Implementation Checklist:

  1. 使用pnpm安装@easyops-cn/docusaurus-search-local插件
  2. 备份当前的docusaurus.config.ts文件
  3. 在docusaurus.config.ts中添加搜索插件配置,支持中文搜索
  4. 构建项目以验证配置并生成搜索索引
  5. 启动本地开发服务器测试搜索功能
  6. 根据测试结果调整搜索插件配置(如需)
  7. 更新.gitignore文件,确保搜索索引不被版本控制跟踪
  8. 重新构建项目并部署到生产环境

Current Execution Step (Updated by EXECUTE mode when starting a step)

Task Progress (Appended by EXECUTE mode after each step completion)

Final Review (Populated by REVIEW mode)