Docusaurus With Algolia
· 阅读需 5 分钟
- Alogolia Offical
- Alogolia Github
- Algolia Docsearch 开发者试用
- Algolia Crawler 爬虫
- Algolia DocSearch 插件文档
- sitemap 插件文档
- Docusaurus integrate Algolia
1. 注册Algolia账号,申请 Docsearch
- 使用Github账号注册Algolia
- 去Docsearch申请,需要填写以下内容
- Github pages 地址: https://lorchr.github.io/light-docusaurus/
- 邮箱 whitetulips@163.com
- 仓库地址 https://github.com/lorchr/light-docusaurus
- 等待审核,审核通过会收到一封邮件
2. 创建 Application
- 登录Algolia官网
- 创建Application,设置名称,选择免费计划
- 控制台打开,设置页面,点击 API Keys,记录以下内容
- Application ID
- Search-Only API Key
- Admin API Key
3. Web端部署爬虫
- 在DocSearch审核通过后,建立应用及索引,获取
APPLICAITON_ID及API_KEY - 使用Algolia账号登录Algolia Crawler
- 使用官方模板配置Docusaurus v3 template部署爬虫
new Crawler({
appId: 'TLGHDZ3Y2I',
apiKey: '0b9a9b1f4fd5fbe9a1962088169c1262',
rateLimit: 8,
maxDepth: 10,
startUrls: ['https://lorchr.github.io/light-docusaurus/'],
sitemaps: ['https://lorchr.github.io/light-docusaurus/sitemap.xml'],
ignoreCanonicalTo: true,
discoveryPatterns: ['https://lorchr.github.io/light-docusaurus/**'],
actions: [
{
indexName: 'light-docusaurus',
pathsToMatch: ['https://lorchr.github.io/light-docusaurus/**'],
recordExtractor: ({ $, helpers }) => {
// priority order: deepest active sub list header -> navbar active item -> 'Documentation'
const lvl0 =
$(
'.menu__link.menu__link--sublist.menu__link--active, .navbar__item.navbar__link--active'
)
.last()
.text() || 'Documentation';
return helpers.docsearch({
recordProps: {
lvl0: {
selectors: '',
defaultValue: lvl0,
},
lvl1: ['header h1', 'article h1'],
lvl2: 'article h2',
lvl3: 'article h3',
lvl4: 'article h4',
lvl5: 'article h5, article td:first-child',
lvl6: 'article h6',
content: 'article p, article li, article td:last-child',
},
indexHeadings: true,
aggregateContent: true,
recordVersion: 'v3',
});
},
},
],
initialIndexSettings: {
YOUR_INDEX_NAME: {
attributesForFaceting: [
'type',
'lang',
'language',
'version',
'docusaurus_tag',
],
attributesToRetrieve: [
'hierarchy',
'content',
'anchor',
'url',
'url_without_anchor',
'type',
],
attributesToHighlight: ['hierarchy', 'content'],
attributesToSnippet: ['content:10'],
camelCaseAttributes: ['hierarchy', 'content'],
searchableAttributes: [
'unordered(hierarchy.lvl0)',
'unordered(hierarchy.lvl1)',
'unordered(hierarchy.lvl2)',
'unordered(hierarchy.lvl3)',
'unordered(hierarchy.lvl4)',
'unordered(hierarchy.lvl5)',
'unordered(hierarchy.lvl6)',
'content',
],
distinct: true,
attributeForDistinct: 'url',
customRanking: [
'desc(weight.pageRank)',
'desc(weight.level)',
'asc(weight.position)',
],
ranking: [
'words',
'filters',
'typo',
'attribute',
'proximity',
'exact',
'custom',
],
highlightPreTag: '<span class="algolia-docsearch-suggestion--highlight">',
highlightPostTag: '</span>',
minWordSizefor1Typo: 3,
minWordSizefor2Typos: 7,
allowTyposOnNumericTokens: false,
minProximity: 1,
ignorePlurals: true,
advancedSyntax: true,
attributeCriteriaComputedByMinProximity: true,
removeWordsIfNoResults: 'allOptional',
separatorsToIndex: '_',
},
},
});
