Project Icon

docusaurus-search-local

Docusaurus 离线多语言搜索插件

docusaurus-search-local 是一个为 Docusaurus v2/v3 开发的离线搜索插件。它支持多语言索引,特别优化了中文搜索。插件提供自定义样式、键盘快捷键和搜索结果限制等功能,可轻松集成到项目中。该插件使用 TypeScript 重写,具有精美样式和全面测试覆盖。

@easyops-cn/docusaurus-search-local

Npm 版本 CI 状态 覆盖率状态

这是一个为 Docusaurus v2/v3 设计的离线/本地搜索插件/主题,支持多种语言,特别针对中文进行了优化。

最初从 cmfcmf/docusaurus-search-local 分叉而来。

之后使用 TypeScript 完全重写 💪,样式进行了优化 💅,支持中文 🇨🇳,并进行了测试覆盖 ✅。

在线演示

https://easyops-cn.github.io/docusaurus-search-local/

截图

英文截图

中文截图

安装

npm install --save @easyops-cn/docusaurus-search-local
# 或
yarn add @easyops-cn/docusaurus-search-local

使用方法

@easyops-cn/docusaurus-search-local 添加到你的 docusaurus 主题中。

// 在你的 `docusaurus.config.js` 中:
module.exports = {
  // ... 你的其他配置。
  themes: [
    // ... 你的其他主题。
    [
      require.resolve("@easyops-cn/docusaurus-search-local"),
      /** @type {import("@easyops-cn/docusaurus-search-local").PluginOptions} */
      ({
        // ... 你的选项。
        // 只要可以长期缓存索引文件,就推荐使用 `hashed`。
        hashed: true,
        // 对于使用中文的文档,建议将 `language` 设置为:
        // ```
        // language: ["en", "zh"],
        // ```
      }),
    ],
  ],
};

注意:我们现在将其作为主题而不是插件呈现,请参阅此评论

主题选项

名称类型默认值描述
indexDocs布尔值true是否索引文档。
indexBlog布尔值true是否索引博客。
indexPages布尔值false是否索引页面。
docsRouteBasePath字符串 | 字符串数组"/docs"文档的基础路由路径。开头不需要斜杠。注意:对于仅文档模式,这需要与@docusaurus/preset-classic配置中的routeBasePath相同,例如"/"
blogRouteBasePath字符串 | 字符串数组"/blog"博客的基础路由路径。开头不需要斜杠。
language字符串 | 字符串数组"en"所有lunr-languages支持的语言,外加zh 🔥。
hashed布尔值 | "filename" | "query"false是否在获取索引时添加哈希查询(基于docsDirblogDir中所有索引的*.md文件的内容哈希,如果适用)。设置为"filename"将在文件名中保存哈希而不是查询中。
docsDir字符串 | 字符串数组"docs"获取内容哈希的文档目录,相对于项目目录。
blogDir字符串 | 字符串数组"blog"docsDir类似,但适用于博客。
removeDefaultStopWordFilter布尔值false有时人们(例如我们)希望保留英语停用词作为索引,因为它们可能与编程文档相关。
removeDefaultStemmer布尔值false如果你希望能够搜索任何部分单词,但会影响搜索性能,请启用此选项。
highlightSearchTermsOnTargetPage布尔值false在目标页面上高亮显示搜索词。
searchResultLimits数字8限制搜索结果数量。
searchResultContextMaxLength数字50设置每个搜索结果显示的最大字符长度。
explicitSearchResultPath布尔值false是否在建议模板中显示标题的明确路径。
ignoreFiles字符串 | 正则表达式 | (字符串 | 正则表达式)[][]设置忽略某些路由的匹配规则。如果要精确匹配,请使用字符串;如果要部分匹配,请使用正则表达式。注意:不包含网站基础URL。
ignoreCssSelectors字符串 | 字符串数组[]索引每个页面时要忽略的CSS选择器列表。
searchBarShortcut布尔值true是否启用键盘快捷键聚焦搜索栏。
searchBarShortcutHint布尔值true是否在搜索栏中显示键盘快捷键提示。如果需要隐藏提示但仍启用快捷键,请禁用此选项。
searchBarPosition"auto" | "left" | "right""auto"搜索栏应出现在导航栏的哪一侧。默认情况下,它将根据文档中的说明,尝试根据你的docusaurus配置自动检测。
docsPluginIdForPreferredVersion字符串当使用多个文档实例时,设置你希望用于搜索索引的首选版本的文档插件ID。
zhUserDict字符串为中文提供自定义词典,参见此处
zhUserDictPath字符串提供中文自定义词典的文件路径,例如:path.resolve("./src/zh-dict.txt")
searchContextByPaths(string | { label: string | Record<string, string>; path: string; } )[][]提供一个子路径列表作为单独的搜索上下文,例如:["docs", "community", "legacy/resources"]。它将根据这些路径创建多个搜索索引。
hideSearchBarWithNoSearchContextbooleanfalse是否在没有匹配搜索上下文时隐藏搜索栏。默认情况下,如果设置了searchContextByPaths,未与之匹配的页面将被视为具有ROOT搜索上下文。通过设置hideSearchBarWithNoSearchContext: true,这些页面将被视为没有搜索上下文,搜索栏将被隐藏。
useAllContextsWithNoSearchContextbooleanfalse在没有提供上下文时是否显示所有上下文的结果。此选项不应与hideSearchBarWithNoSearchContext: true一起使用,因为这会在没有搜索上下文时显示结果。这将导致索引重复,并可能根据索引大小产生性能成本。
forceIgnoreNoIndexbooleanfalse即使设置了noIndex: true,也强制启用搜索索引,这也会影响未列出的文章。

国际化

从 v0.25.0 版本开始,我们支持 Docusaurus 国际化系统,并默认提供了英语、德语、越南语和简体中文的翻译。

对于其他语言,请按照官方教程学习如何翻译插件数据。并在 i18n/*/code.json 中翻译 theme.SearchBar.*theme.SearchPage.*

从 v0.25.0 版本开始,不再支持通过选项进行翻译。

查看 0.25.0 版本之前的翻译选项 要使此主题本地化,请传递一个 `translations` 选项,其默认值为:
{
  "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": "未找到文档"
  }
}

注意,如果复数形式与单数形式相同,可以省略 *_plural

自定义样式

这个主题附带了精心设计的样式,就像 Docusaurus v2 网站上的 Algolia 搜索一样。您可以自由覆盖以下这些 CSS 自定义属性(CSS 变量)。

变量默认值(浅色主题)默认值(深色主题)
--search-local-modal-background#f5f6f7var(--ifm-background-color)
--search-local-modal-shadowinset 1px 1px 0 0 hsla(0, 0%, 100%, 0.5),
0 3px 8px 0 #555a64
inset 1px 1px 0 0 #2c2e40,
0 3px 8px 0 #000309
--search-local-modal-width560px-
--search-local-modal-width-sm340px-
--search-local-spacing12px-
--search-local-hit-background#fffvar(--ifm-color-emphasis-100)
--search-local-hit-shadow0 1px 3px 0 #d4d9e1none
--search-local-hit-color#444950var(--ifm-font-color-base)
--search-local-hit-height56px-
--search-local-highlight-colorvar(--ifm-color-primary)-
--search-local-muted-color#969fafvar(--ifm-color-secondary-darkest)
--search-local-icon-stroke-width1.4-
--search-local-hit-active-colorvar(--ifm-color-white)-

例如:

:root {
  --search-local-modal-width: 480px;
  --search-local-highlight-color: #5468ff;
}

html[data-theme="dark"] {
  --search-local-highlight-color: #d23669;
}

故障排除

在构建文档项目时,设置环境变量 DEBUG=search-local:* 以启用 debug 日志。

# 在您的文档项目中:
DEBUG=search-local:* yarn build

如果遇到一些特定错误:

  • Error: Cannot mix different versions of joi schemas

    • 尝试使用 @easyops-cn/docusaurus-search-local >= v0.16.0 搭配 Docusaurus >= v2.0.0-alpha.73
    • 尝试使用 @easyops-cn/docusaurus-search-local v0.14.0 到 v0.15.1 搭配 Docusaurus v2.0.0-alpha.68 到 v2.0.0-alpha.72
    • 或者尝试使用 @easyops-cn/docusaurus-search-local <= v0.13.1 搭配 Docusaurus <= v2.0.0-alpha.66
  • 模块未找到:错误:无法解析 '@docusaurus/useRouteContext'

    • 尝试在 Docusaurus >= v2.0.0-beta.18 版本中使用 @easyops-cn/docusaurus-search-local >= v0.25.0
    • 尝试在 Docusaurus < v2.0.0-beta.18 版本中使用 @easyops-cn/docusaurus-search-local < v0.25.0

延伸阅读

贡献

请参阅贡献指南

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号