第14章 Docusaurus 搜索功能配置指南:Algolia DocSearch 集成与本地搜索选项
// Algolia 提供的应用 ID
appId: 'YOUR_APP_ID',
// 公开的 API key:可以放心提交
apiKey: 'YOUR_SEARCH_API_KEY',
indexName: 'YOUR_INDEX_NAME',
// 可选:参见下方的文档说明
contextualSearch: true,
// 可选:指定哪些域名通过 window.location 而不是 history.push 进行导航。当 Algolia 配置抓取了多个文档站点、而我们希望用 window.location.href 跳转到它们时很有用。
externalUrlRegex: 'external\\.com|domain\\.com',
// 可选:替换 Algolia 返回结果 URL 的部分内容。当多个部署使用不同 baseUrl 但共用同一个搜索索引时很有用。`from` 参数可以使用正则表达式或字符串。例如:localhost:3000 vs myCompany.com/docs
replaceSearchResultPathname: {
from: '/docs/', // 也可以用正则:/\/docs\//
to: '/',
},
// 可选:Algolia 搜索参数
searchParameters: {},
// 可选:默认开启的搜索页面路径(设为 `false` 可禁用)
searchPagePath: 'search',
// 可选:是否在 Docsearch 上启用 insights 功能(默认为 `false`)
insights: false,
//... 其他 Algolia 参数
},
},
};
info在 Docusaurus v1 中,searchParameters 选项曾叫 algoliaOptions。可能的取值请参考官方 DocSearch 文档。 warning在 Algolia 抓取你的网站之前,搜索功能无法可靠工作。如果网站发生重大改动后搜索失灵,请在 Algolia 控制台触发一次新的抓取。 上下文搜索 上下文搜索默认开启。 它确保搜索结果与当前的语言和版本相匹配。 docusaurus.config.jsmodule.exports = {
// ...
themeConfig: {
// ...
algolia: {
contextualSearch: true,
},
},
};
假设你有两个版本的文档(v1 和 v2)以及两种语言(英语和法语)。 在浏览 v2 文档时,返回 v1 文档的搜索结果会很奇怪。由于 v1 和 v2 的文档往往非常相似,同一查询可能会产生重复的搜索结果(每个版本各一条)。 同理,在浏览法语网站时,返回英语文档的搜索结果也不合理。 为解决此问题,上下文搜索功能会识别你正在浏览的特定文档版本和语言,并动态创建搜索结果过滤条件。 * 在 /en/docs/v1/myDoc 上,搜索结果仅包含 v1 文档的英语结果(以及其他未版本化的页面) * 在 /fr/docs/v2/myDoc 上,搜索结果仅包含 v2 文档的法语结果(以及其他未版本化的页面) info 当使用 contextualSearch: true(默认值)时,上下文分面过滤器将与 algolia.searchParameters.facetFilters 中提供的过滤器合并。如有特殊需求,你可以禁用 contextualSearch 并自定义 facetFilters: docusaurus.config.js module.exports = {
// ...
themeConfig: {
// ...
algolia: {
contextualSearch: false,
searchParameters: {
facetFilters: ['language:en', ['filter1', 'filter2'], 'filter3'],
},
},
},
};
参考相关 Algolia 分面文档。 自定义 Algolia 搜索样式 默认情况下,DocSearch 自带一个精细调整的、符合无障碍标准的设计主题,确保颜色和对比度符合规范。 不过,你可以通过编辑 /src/css/custom.css 文件,复用 Docusaurus 的 Infima CSS 变量来自定义 DocSearch 样式。 /src/css/custom.css [data-theme='light'] .DocSearch {
/* --docsearch-primary-color: var(--ifm-color-primary); */
/* --docsearch-text-color: var(--ifm-font-color-base); */
--docsearch-muted-color: var(--ifm-color-secondary-darkest);
--docsearch-container-background: rgba(94, 100, 112, 0.7);
/* Modal */
--docsearch-modal-background: var(--ifm-color-secondary-lighter);
/* Search box */
--docsearch-searchbox-background: var(--ifm-color-secondary);
--docsearch-searchbox-focus-background: var(--ifm-color-white);
/* Hit */
--docsearch-hit-color: var(--ifm-font-color-base);
--docsearch-hit-active-color: var(--ifm-color-white);
--docsearch-hit-background: var(--ifm-color-white);
/* Footer */
--docsearch-footer-background: var(--ifm-color-white);
}
[data-theme='dark'] .DocSearch {
--docsearch-text-color: var(--ifm-font-color-base);
--docsearch-muted-color: var(--ifm-color-secondary-darkest);
--docsearch-container-background: rgba(47, 55, 69, 0.7);
/* Modal */
--docsearch-modal-background: var(--ifm-background-color);
/* Search box */
--docsearch-searchbox-background: var(--ifm-background-color);
--docsearch-searchbox-focus-background: var(--ifm-color-black);
/* Hit */
--docsearch-hit-color: var(--ifm-font-color-base);
--docsearch-hit-active-color: var(--ifm-color-white);
--docsearch-hit-background: var(--ifm-color-emphasis-100);
/* Footer */
--docsearch-footer-background: var(--ifm-background-surface-color);
--docsearch-key-gradient: linear-gradient(
-26.5deg,
var(--ifm-color-emphasis-200) 0%,
var(--ifm-color-emphasis-100) 100%
);
}
自定义 Algolia 搜索行为
Algolia DocSearch 支持多个选项,你可以通过 docusaurus.config.js 文件中的 algolia 字段进行配置。
module.exports = {
themeConfig: {
// ...
algolia: {
apiKey: 'YOUR_API_KEY',
indexName: 'YOUR_INDEX_NAME',
// 其他选项...
},
},
};
修改 Algolia 搜索组件
如果你希望自定义 Algolia 搜索的 React 组件,可以覆盖 @docusaurus/theme-search-algolia 中的 SearchBar 组件: