Project Icon

docusaurus-search-local

Docusaurus v2+离线本地搜索插件

docusaurus-search-local是一款为Docusaurus v2+开发的离线本地搜索插件。该插件支持多版本文档和多语言内容,提供搜索结果高亮功能。它包含针对文档、博客和普通页面的自定义解析器,采用延迟加载索引方式提高性能。插件完全本地运行,无需依赖第三方服务器,适用于防火墙内部署。安装配置简便,并提供丰富的自定义选项,可满足各类Docusaurus项目的搜索需求。

Offline / Local Search for Docusaurus v2+

Version License code style: prettier GitHub issues GitHub last commit

Offline / local search for Docusaurus v2+ that works behind your firewall.

Feature Highlights:

  • Supports multiple documentation versions
  • Supports documentation written in languages other than English
  • Highlights search results
  • Customized parsers for docs, blogs, and general pages
  • Lazy-loads the index

Search in Action

Note: We use the open source algolia/autocomplete library for the searchbox. This library is just used as the frontend, and, unlike the default Docusaurus search experience (algolia/docsearch), does not connect to any Algolia or third-party servers.

Installation

npm install @cmfcmf/docusaurus-search-local

or

yarn add @cmfcmf/docusaurus-search-local

Usage

Add this plugin to the plugins array in docusaurus.config.js.

module.exports = {
  // ...
  plugins: [require.resolve("@cmfcmf/docusaurus-search-local")],

  // or, if you want to specify options:

  // ...
  plugins: [
    [
      require.resolve("@cmfcmf/docusaurus-search-local"),
      {
        // Options here
      },
    ],
  ],
};

The following options are available (defaults are shown below):

{
  // whether to index docs pages
  indexDocs: true,

  // Whether to also index the titles of the parent categories in the sidebar of a doc page.
  // 0 disables this feature.
  // 1 indexes the direct parent category in the sidebar of a doc page
  // 2 indexes up to two nested parent categories of a doc page
  // 3...
  //
  // Do _not_ use Infinity, the value must be a JSON-serializable integer.
  indexDocSidebarParentCategories: 0,

  // Includes parent categories path in search result
  includeParentCategoriesInPageTitle: false,

  // whether to index blog pages
  indexBlog: true,

  // whether to index static pages
  // /404.html is never indexed
  indexPages: false,

  // language of your documentation, see next section
  language: "en",

  // setting this to "none" will prevent the default CSS to be included. The default CSS
  // comes from autocomplete-theme-classic, which you can read more about here:
  // https://www.algolia.com/doc/ui-libraries/autocomplete/api-reference/autocomplete-theme-classic/
  // When you want to overwrite CSS variables defined by the default theme, make sure to suffix your
  // overwrites with `!important`, because they might otherwise not be applied as expected. See the
  // following comment for more information: https://github.com/cmfcmf/docusaurus-search-local/issues/107#issuecomment-1119831938.
  style: undefined,

  // The maximum number of search results shown to the user. This does _not_ affect performance of
  // searches, but simply does not display additional search results that have been found.
  maxSearchResults: 8,

  // lunr.js-specific settings
  lunr: {
    // When indexing your documents, their content is split into "tokens".
    // Text entered into the search box is also tokenized.
    // This setting configures the separator used to determine where to split the text into tokens.
    // By default, it splits the text at whitespace and dashes.
    //
    // Note: Does not work for "ja" and "th" languages, since these use a different tokenizer.
    tokenizerSeparator: /[\s\-]+/,
    // https://lunrjs.com/guides/customising.html#similarity-tuning
    //
    // This parameter controls the importance given to the length of a document and its fields. This
    // value must be between 0 and 1, and by default it has a value of 0.75. Reducing this value
    // reduces the effect of different length documents on a term’s importance to that document.
    b: 0.75,
    // This controls how quickly the boost given by a common word reaches saturation. Increasing it
    // will slow down the rate of saturation and lower values result in quicker saturation. The
    // default value is 1.2. If the collection of documents being indexed have high occurrences
    // of words that are not covered by a stop word filter, these words can quickly dominate any
    // similarity calculation. In these cases, this value can be reduced to get more balanced results.
    k1: 1.2,
    // By default, we rank pages where the search term appears in the title higher than pages where
    // the search term appears in just the text. This is done by "boosting" title matches with a
    // higher value than content matches. The concrete boosting behavior can be controlled by changing
    // the following settings.
    titleBoost: 5,
    contentBoost: 1,
    tagsBoost: 3,
    parentCategoriesBoost: 2, // Only used when indexDocSidebarParentCategories > 0
  }
}

You can now use the search bar to search your documentation.

Important: Search only works for the statically built documentation (i.e., after you ran npm run docusaurus build in your documentation folder).

Search does not work in development (i.e., when running npm run docusaurus start). If you want to test search locally, first build the documentation with npm run docusaurus build, and then serve it via npm run docusaurus serve.

Non-English Documentation

Use the language option if your documentation is not written in English. You can either specify a single language or an array of multiple languages. The following languages are available:

ar, da, de, en, es, fi, fr, hi, hu, it, ja, nl, no, pt, ro, ru, sv, th, tr, vi, zh

Important: For Chinese language support (zh), you also have to install the nodejieba npm package at ^2.5.0.

Documentation Versions

Documentation versions created with the official Docusaurus docs plugin are supported. The search bar defaults to the latest version (not next, but the latest version defined in versions.json) when not on a documentation page (e.g., when looking at a blog post or a static page). If the user visits a documentation page, the version is extracted from the page and search will only search the documentation of that version. The searchbar placeholder text always reflects the currently detected documentation version.

Internationalization

This plugin supports documentation using Docusaurus i18n out of the box.. Please contribute additional translations by creating a new translation file in the codeTranslations subfolder and submitting a PR.

You can also adjust translations by modifiying the translations in <yourfolder>/i18n/<locale>/code.json that start with cmfcmf/d-s-l.. Read more at: https://docusaurus.io/docs/i18n/tutorial#translate-json-files

Debugging

If building your documentation produces an error, you can build it in debug mode to figure out which page is causing it. To do so, simply set the DEBUG environment variable when building your documentation: DEBUG=1 npm run docusaurus build.

CONTRIBUTING

Please see the CONTRIBUTING.md file for further information.

License

MIT

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

豆包MarsCode

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

Project Cover

AI写歌

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

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

Kimi

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

Project Cover

有言AI

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

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

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

Project Cover

SubCat字幕猫

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

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