首页 > 其他分享 >手动给docusaurus添加一个搜索

手动给docusaurus添加一个搜索

时间:2024-04-18 23:56:51浏览次数:29  
标签:docusaurus index www faq docs 手动 content 添加 com

新版博客用docusaurus重构已经有些日子了,根据docusaurus的文档上也申请了Algolia,想一劳永逸的解决博客的搜索问题。但是流水有意,落花无情。

algolia总是不给我回复,我只能对着algolia的申请页面仰天长叹。

正常情况的申请

按照docusaurus官方文档上说的,当我们需要搜索的时候,打开https://docsearch.algolia.com/apply/填一下申请,提交就行了。

image-20240412142349147

但是可惜的是,我填好资料,点这个join the program很多次了,就是没有反应。

怎么办呢?我仔细检查了它的官方文档,看他的描述说是需要等待2个星期。但是2个星期实在太久了,在我们只争朝夕的今天,怎么行。

还好,我看到它还有一种手动上传的办法,笨是笨了点,总比没有的好。那就开始吧。

手动上传

首先我们得去Algolia上注册一个账号,然后在这里需要创建一个应用:

image-20240412143404546

应用的旁边,需要创建一个index用来存储搜索数据:

image-20240412143441586

这样,前期的准备工作就做好了。

再在api设置中找到APPLICATION_ID和API_KEY。把他们保存到.env文件中:

APPLICATION_ID=YOUR_APP_ID
API_KEY=YOUR_API_KEY

注意,这里的API_KEY最好是Admin API Key,因为会有一些权限需要。

如果是Admin API Key的话,记得不要分享给别人,这个key的权限比较大,可以删除和更新你的index数据。

设置配置文件

接下来,我们还需要一个配置文件。用来配置爬虫信息。下面是一个最基本的配置信息。

{
  "index_name": "example",
  "start_urls": ["https://www.example.com/docs"],
  "selectors": {
    "lvl0": "#content header h1",
    "lvl1": "#content article h1",
    "lvl2": "#content section h3",
    "lvl3": "#content section h4",
    "lvl4": "#content section h5",
    "lvl5": "#content section h6",
    "text": "#content header p,#content section p,#content section ol"
  }
}

其中index_name就是我们刚刚在网站上创建的index_name。当DocSearch scraper程序跑起来的时候,你会发现有一个临时的index_name + _tmp 索引被创建。

别担心,在程序执行完毕之后,会把这个tmp index会替换最终的index。

start_urls包含的是要开始爬取的链接地址。爬虫会循环爬取链接里面的a标签,除非是遇到了stop_urls。另外爬虫不会爬取其他域名的链接。

selectors是用于创建记录层次结构的所有 CSS 选择器。其中text是强制,必须要有的。

如果你对不同的url有不同的selector方案,那么可以给不同的url配置不同的selectors_key,如下所示:

{
  "start_urls": [
    {
      "url": "http://www.example.com/docs/faq/",
      "selectors_key": "faq"
    },
    {
      "url": "http://www.example.com/docs/"
    }
  ],
  […],
  "selectors": {
    "default": {
      "lvl0": ".docs h1",
      "lvl1": ".docs h2",
      "lvl2": ".docs h3",
      "lvl3": ".docs h4",
      "lvl4": ".docs h5",
      "text": ".docs p, .docs li"
    },
    "faq": {
      "lvl0": ".faq h1",
      "lvl1": ".faq h2",
      "lvl2": ".faq h3",
      "lvl3": ".faq h4",
      "lvl4": ".faq h5",
      "text": ".faq p, .faq li"
    }
  }
}

好了,基本的配置就这些了。

运行爬虫脚本

现在可以运行爬虫脚本了,这里有两个选择,一是跑docker,方便快捷。二是从源代码运行,这个就比较麻烦了。

这里我只是希望博客可以有搜索功能,所以源码什么的就算了吧,我们直接跑docker命令:

run -it --env-file=.env -e "CONFIG=$(cat flydean.conf | jq -r tostring)" algolia/docsearch-scraper

过一会就运行起来了。但是我们看看日志:

DocSearch: http://www.flydean.com/07-python-module/ 0 records)
DocSearch: http://www.flydean.com/08-python-io/ 0 records)
DocSearch: http://www.flydean.com/09-python-error-exception/ 0 records)
DocSearch: http://www.flydean.com/06-python-data-structure/ 0 records)

Crawling issue: nbHits 0 for myblog

nb_hits表示的是DocSearch 提取和索引的记录数。

怎么是0 records?难道什么都没有爬到?

直觉是我的start_urls不太对,我们把它换成sitemap.xml再试一次:

{
  "sitemap_urls": ["http://www.example.com/docs/sitemap.xml"]
}

还是同样的错误。

没办法,再去仔细读一下配置文件的说明。

终于发现了问题,原来这里的selectors写的有问题,#content header h1表示的是在ID为content的元素内部,寻找所有属于header类的元素,并在这些元素内部寻找所有的<h1>元素。但是在docusaurus V3版本中已经发生了变化。

我们把它改写成这样:

  "selectors": {
    "lvl0": {
      "selector": ".menu__link--sublist.menu__link--active",
      "global": true,
      "default_value": "Documentation"
    },
    "lvl1": "header h1",
    "lvl2": "article h2",
    "lvl3": "article h3",
    "lvl4": "article h4",
    "lvl5": "article h5",
    "lvl6": "article h6",
    "text": "article p, article li"
  },

再运行一次,这次终于有数据了。

回到网站上看看,已经有数据上传上来了:

image-20240412153529110

好了,我们在docusaurus.config.ts中配置一下,看看效果:

algolia: {
        // The application ID provided by Algolia
        appId: 'YOUR_APP_ID',
        // Public API key: it is safe to commit it
        apiKey: 'YOUR_SEARCH_API_KEY',
        indexName: 'YOUR_INDEX_NAME',
        // Optional: see doc section below
        contextualSearch: true,
        // Optional: Algolia search parameters
        searchParameters: {},
        // Optional: path for search page that enabled by default (`false` to disable it)
        searchPagePath: 'search',
        //... other Algolia params
      },

我们在网站上试试效果:

image-20240412165018633

完美,遇到问题的小伙伴可以私信我哟!

点我查看更多精彩内容:www.flydean.com

标签:docusaurus,index,www,faq,docs,手动,content,添加,com
From: https://www.cnblogs.com/flydean/p/18144787

相关文章

  • 如何从头手动制作一个冲压仿真软件 —— 《冲压模可视化仿真模拟》
    因为工作需要,前段时间曾思考过如何手动做一个冲压仿真软件,但是研究发现这东西居然需要用到很多的数学和物理学的知识,而这方面的知识我又不具备,于是只好作罢,但是后来看到了本文中的这个论文,虽然没有看到全文,但是感觉这个主题还是比较贴切的。原文地址:https://wap.cnki.net/touch......
  • EAS_DEP添加动态控件,在代码中获取DEP扩展控件
    1.在编辑界面onload的方法前置事件添加脚本//把动态控件传递到代码中varcomponents=newjava.util.HashMap();components.put("prmtassureAmountAccount",pluginCtx.getKDBizPromptBox("prmtassureAmountAccount"));components.put("prmtassureInterestAccount",......
  • 使用Maps SDK添加本地slpk
    SceneViewm_sceneView;publicvoidLoadSceneLayerFromSLPK(SceneViewsceneView,stringslpkPath){ if(!File.Exists(slpkPath)) thrownewException("文件不存在"); if(null==sceneView.Scene) CreateScene(sceneView); Uritreespk=newSystem.Uri......
  • 在博客园平台为博客自动化添加目录
    一、效果预览二、操作方法在设置-页脚HTML代码中添加如下代码:<scriptlanguage="javascript"type="text/javascript">//生成目录索引列表//ref:http://www.cnblogs.com/wangqiguo/p/4355032.html//modifiedby:zzqfunctionGenerateContentList(){varmainC......
  • 海康威视添加NAS存储
    1、关闭防火墙iptables-Fsetenforce0systemctlstopfirewalldsystemctldisablefirewalld2、创建目录mkdir-p/data/HaiKangData3T3、格式化硬盘mkfs.xfs/dev/sdb-f4、挂载blkidvim/etc/fstabUUID="5faf3a9b-fc2a-483b-a3ae-f0e00717a233/data/HaiKangData3T......
  • bat中检查系统版本并添加系统变量
    bat中检查系统版本并添加系统变量补丁包中升级nodejs​版本时,需要检查下操作系统版本,如果低于Windows8.1​需要添加系统变量NODE_SKIP_PLATFORM_CHECK​@echoofffor/f"tokens=1,2,3,4"%%iin('ver')do(setver_temp=%%l)setver_major=%ver_temp:~0,2%se......
  • bat中检查系统版本并添加系统变量
    bat中检查系统版本并添加系统变量补丁包中升级nodejs​版本时,需要检查下操作系统版本,如果低于Windows8.1​需要添加系统变量NODE_SKIP_PLATFORM_CHECK​@echoofffor/f"tokens=1,2,3,4"%%iin('ver')do(setver_temp=%%l)setver_major=%ver_temp:~0,2%se......
  • mysql8.0的root用户无了,添加root用户
    修改配置文件,跳过登陆验证sudovim/etc/mysql/mysql.conf.d/mysqld.cnf添加root用户usemysql;insertintouser(User,authentication_string,ssl_cipher,x509_issuer,x509_subject)values('root','','','','');添加权限updateuser......
  • 为PC添加快捷指令
    使用命令+快捷键定制你的PC以重启资源管理器为例,对于许多时候电脑卡死,重启资源管理器往往是有效的方式正常操作为ctrl+alt+delete然后选择任务管理器,然后在其中找到资源管理器,紧接着右键选择重启感觉有点麻烦了,本文介绍使用命令加快捷键的方式简化1.撰写命令在放软件的地方......
  • React 添加常用通用框架
    目录前言React第三方库使用ant-design安装推荐使用react-icons:icon库安装简单使用react-router:React路由添加TailwindCSS:html通用组件TailwindCSS安装yesicon中文Icon网daisyuiEchart+echarts-for-react总结前言今天来写一个简单的后台管理页面,没有后端接口,都是模拟的数......