Filename: search-task.md Created On: 2024-06-08 Created By: Claude AI Associated Protocol: RIPER-5 + Multidimensional + Agent Protocol
为Docusaurus网站添加搜索功能
这是一个使用Docusaurus v3.6.3构建的文档网站,目前没有搜索功能。需要添加一个适合的搜索解决方案,使用户能够方便地搜索网站中的内容。
- Docusaurus版本:3.6.3
- 使用的预设:classic
- 已有配置:文档、博客、主题
- 语言:配置为英文(defaultLocale: 'en'),但实际内容为中文
- 曾经尝试过的搜索插件:@aldridged/docusaurus-plugin-lunr(已注释)
- 文档内容主要是中文
- 项目名称为ESBoot,是一个前端工程化工具集
- 文档结构包含文档(docs)和API参考(api)
Docusaurus官方支持几种添加搜索功能的方式:
-
Algolia DocSearch
- 优点:免费托管服务,索引质量高,响应快
- 缺点:需要申请,可能等待时间长,有使用条件限制
- 适用:中大型开源项目
-
本地搜索插件(如docusaurus-search-local)
- 优点:无需外部依赖,设置简单,适合中小型网站
- 缺点:对大型网站性能可能有影响
- 适用:中小型项目,不希望依赖外部服务
-
@easyops-cn/docusaurus-search-local
- 优点:功能完善,支持中文搜索,支持离线搜索,可本地化
- 缺点:需要额外的构建时间
- 适用:需要中文搜索和离线搜索功能的项目
-
docusaurus-lunr-search
- 优点:轻量级,易于配置
- 缺点:功能相对简单,中文支持有限
- 适用:小型文档项目
-
docusaurus-theme-search-typesense
- 优点:性能好,可自定义性强
- 缺点:需要自行托管Typesense服务
- 适用:需要自定义搜索体验的项目
- 需要搜索文档和博客内容
- 需要良好的中文搜索支持(文档内容主要是中文)
- 最好无需外部服务依赖(便于维护)
- 安装配置简单(避免复杂设置)
根据项目分析,我们将评估三种可能的搜索解决方案:
这个方案使用 @easyops-cn/docusaurus-search-local 插件,它是专为 Docusaurus 设计的本地搜索解决方案,具有良好的中文支持。
优势:
- 完全客户端解决方案,无需外部服务
- 具有良好的中文分词和搜索支持
- 支持语言特定的搜索(可以优化中文搜索体验)
- 开箱即用的UI组件,与Docusaurus主题完美集成
- 支持离线搜索,适合内部文档使用
- 安装简单,配置灵活
劣势:
- 对于非常大型的网站,构建时间可能会增加
- 搜索索引会增加客户端的初始加载时间(但可配置懒加载)
技术实现:
- 安装插件:
npm install --save @easyops-cn/docusaurus-search-local - 在 docusaurus.config.ts 中添加插件配置
- 可以针对中文搜索进行优化配置
Algolia DocSearch 是 Docusaurus 官方推荐的搜索解决方案,提供免费的托管搜索服务。
优势:
- 由专业团队维护的高质量搜索体验
- 搜索性能极佳,结果精准
- 不增加构建时间和客户端负担
- 支持中文搜索(需要合理配置)
- 集成 Docusaurus 主题
劣势:
- 需要申请和配置(可能需要等待)
- 依赖外部服务
- 需要网站是公开的且符合条件
- 更新索引有时间延迟
技术实现:
- 向 Algolia DocSearch 项目提交申请
- 获取 API 密钥后配置 docusaurus.config.ts
- 可能需要额外配置爬虫以优化中文内容索引
此方案基于 FlexSearch(一个高性能的全文搜索库)实现自定义搜索功能,通过配置优化中文搜索。
优势:
- 完全可定制的搜索体验
- 针对中文内容优化的灵活配置选项
- 无需依赖外部服务
- 可以实现更复杂的搜索功能(如分类搜索)
劣势:
- 需要更多的开发工作来实现和维护
- 可能需要自行处理UI组件
- 对Docusaurus插件知识有更高要求
技术实现:
- 安装 FlexSearch:
npm install flexsearch - 创建自定义主题组件实现搜索界面
- 在构建时生成搜索索引
- 集成到 Docusaurus 主题
综合考虑项目需求和各方案优劣,推荐使用方案1:@easyops-cn/docusaurus-search-local,因为:
- 它提供了良好的中文搜索支持
- 无需依赖外部服务,易于维护
- 安装和配置简单
- 与Docusaurus主题完美集成
- 可以针对中文内容进行优化配置
该方案最适合当前项目的需求,能够快速实现高质量的中文文档搜索功能,且维护成本低。
下面是为Docusaurus网站添加@easyops-cn/docusaurus-search-local搜索功能的详细实施计划:
- 文件:package.json - 添加新依赖
- 文件:docusaurus.config.ts - 添加和配置插件
- 文件:.gitignore - 确保搜索索引文件被忽略(如需要)
我们需要安装@easyops-cn/docusaurus-search-local插件包。
- 文件:无(命令行操作)
- 原因:添加搜索功能所需的插件包
- 命令:
pnpm add @easyops-cn/docusaurus-search-local
在进行配置更改前,先备份docusaurus.config.ts文件,以防配置有问题需要回滚。
- 文件:无(命令行操作)
- 原因:安全起见,备份原始配置
- 命令:
cp docusaurus.config.ts docusaurus.config.ts.bak
修改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": "没有找到文档" } } ], ],
构建项目,确认搜索插件配置无误,并生成搜索索引。
- 文件:无(命令行操作)
- 原因:验证配置并生成搜索索引
- 命令:
pnpm run build
启动本地开发服务器,测试搜索功能是否正常工作。
- 文件:无(命令行操作)
- 原因:验证搜索功能
- 命令:
pnpm run dev
根据测试结果,可能需要调整搜索插件的配置参数,以优化搜索体验。
- 文件:docusaurus.config.ts
- 原因:根据测试结果优化搜索配置
- 修改:可能需要调整上述配置中的参数,如搜索结果数量、索引范围等
确保搜索索引文件不会被版本控制跟踪(如果生成在项目目录中)。
- 文件:.gitignore
- 原因:避免搜索索引文件被提交到代码仓库
- 修改:添加以下内容(如果不存在)
# 搜索索引文件 .docusaurus/*.search.*
完成配置后,重新构建项目并部署到生产环境。
- 文件:无(命令行操作)
- 原因:生成最终的搜索索引并部署网站
- 命令:
pnpm run build pnpm run deploy # 或者您使用的部署命令
实施清单汇总所有需要执行的步骤:
Implementation Checklist:
- 使用pnpm安装@easyops-cn/docusaurus-search-local插件
- 备份当前的docusaurus.config.ts文件
- 在docusaurus.config.ts中添加搜索插件配置,支持中文搜索
- 构建项目以验证配置并生成搜索索引
- 启动本地开发服务器测试搜索功能
- 根据测试结果调整搜索插件配置(如需)
- 更新.gitignore文件,确保搜索索引不被版本控制跟踪
- 重新构建项目并部署到生产环境