手动给docusaurus添加一个搜索

新版博客用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 AlgoliaappId: 'YOUR_APP_ID',// Public API key: it is safe to commit itapiKey: 'YOUR_SEARCH_API_KEY',indexName: 'YOUR_INDEX_NAME',// Optional: see doc section belowcontextualSearch: true,// Optional: Algolia search parameterssearchParameters: {},// Optional: path for search page that enabled by default (`false` to disable it)searchPagePath: 'search',//... other Algolia params},

我们在网站上试试效果:

image-20240412165018633

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gitlab: Python项目CI/CD实践

目录 1. 说明 2. 准备工作 2.1 服务器 2.2 开发机hosts文件 2.3 项目 3. 步骤过程 3.1 建仓Fastapi T1 3.2 开发机测试构建与推送 ​编辑 3.3 在工作站添加gitlab-runner 3.4 提交代码&#xff0c;查看Pipelines结果 3.5 观察部署情况 4. 参考 1. 说明 分别以一个…

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测(Matlab实现)

【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测&#xff08;Matlab实现&#xff09; 目录 【2024 SCI一区】 基于DCS-BiLSTM-Attention的多元回归预测&#xff08;Matlab实现&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 差异创意搜索算法&…

C++ 静态成员函数(二)

一、访问静态成员变量 静态成员函数可以通过作用域运算符::来访问类的静态成员变量和静态成员函数 静态成员函数不属于任何特定的对象&#xff0c;而是属于整个类&#xff0c;可以通过类名直接调用&#xff0c;无需创建类的实例。静态成员函数不能访问类的非静态成员变量和非…

在 Linux 终端中创建目录

目录 ⛳️推荐 前言 在 Linux 中创建一个新目录 创建多个新目录 创建多个嵌套的子目录 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 前言 在本系列的这一部…

Maven的dependencyManagement与dependencies区别

先说结论&#xff1a;Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。 在maven多模块项目的pom文件中&#xff0c;有的小伙伴会发现最外层的pom文件和里面的pom文件有个地方不一样 如下图 父pom 子pom 一般来说是在maven的最外父工程pom文件里&…

npm内部机制与核心原理

npm 的核心目标&#xff1a; Bring the best of open source to you, your team and your company. npm 最重要的任务是安装和维护开源库。 npm 安装机制与背后思想 npm 的安装机制非常值得探究。Ruby 的 Gem&#xff0c;Python的pip都是全局安装机制&#xff0c;但是npm的安装…

界面组件Telerik UI for WPF 2024 Q1新版亮点 - 全新DateRangePicker组件

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

如何正确查看容器的CPU使用率

进入容器中top&#xff0c;虽然看到的PID是容器的&#xff0c;但是%Cpu的统计信息却是宿主机的。 如图 原理 进程的cpu使用率是如何计算出来的&#xff1f; 每个进程的状态是放在文件里的&#xff0c;在/proc目录下&#xff0c;每个进程有自己pid命名的文件夹&#xff0c; …

.NET 爬虫从入门到入狱

目录 前言 1.&#x1f4a1;使用HttpClient爬取数据 2.&#x1f680;模拟User-Agent 3.&#x1f935;使用HTML解析库 3.&#x1f44c;前端Price显示 4.&#x1f331;运行实例 获取金价Au 5.&#x1f9fe;使用正则表达式解析 6.&#x1f4ab;获取BTC价格 7.✨获取CSDN热点…

4.15报错记录

打开文件时出错a bytes-like object is required,notNoneType 确保E:/data/stdata/st- images-1208-json|ST-WT-1.json是一个有效的标签文件。 今天用X-anylabling更改标签目录时出现这个报错 解决方案&#xff1a;图片文件夹中创建同名的一个文件夹把json文件放进去就可以打…

[Qt网络编程]之UDP通讯的简单编程实现

hello&#xff01;欢迎大家来到我的Qt学习系列之网络编程之UDP通讯的简单编程实现。希望这篇文章能对你有所帮助&#xff01;&#xff01;&#xff01; 本篇文章的相关知识请看我的上篇文章: http://t.csdnimg.cn/UKyeM 目录 UDP通讯 基于主窗口的实现 基于线程的实现 UDP通讯…

【YOLO系列PR、F1绘图】更改v5、v7、v8(附v8训练、验证方式),实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

目录 1. 前提 效果图2. 更改步骤2.1 得到PR_curve.csv和F1_curve.csv2.1.1 YOLOv7的更改2.1.1.1 得到PR_curve.csv2.2.1.2 得到F1_curve.csv 2.1.2 YOLOv5的更改&#xff08;v6.1版本&#xff09;2.1.3 YOLOv8的更改&#xff08;附训练、验证方式&#xff09; 2.2 绘制PR曲线 …

【创建型模式】抽象工厂模式

一、抽象工厂模式概述 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 模式动机&#xff1a; 1.当系统提供的工厂生产的具体产品并不是一个简单的对象&#xff0c;而是多个位于不同产品等级结构、属于不同类型的…

41、二叉树-二叉树的层序遍历

思路&#xff1a; 层序遍历就是从左到右依次遍历。这个时候就可以使用队列的方式。例如先把头节点入队&#xff0c;然后遍历开始&#xff0c;首先计算队列长度&#xff0c;第一层&#xff0c;长度为了&#xff0c;遍历一次&#xff0c;依次出队&#xff0c;头结点出队&#xff…

Tomcat和Spring Boot配置https

生成测试证书 生成证书前&#xff0c;先验证本地是否正确配置jdk环境变量&#xff0c;如果jdk环境变量配置正确&#xff0c;在命令行程序输入生成证书的命令。 keytool -genkey -alias tomcat -keyalg RSA -keystore "F:\job\apache-tomcat-8.5.29\key\freeHttps.keysto…

微信小程序之图片上传并保存在服务器

先将图片上传到服务器&#xff0c;后端接口将保存好的图片地址返回给小程序&#xff0c;再将小程序中添加图像的图片的url替换为服务器中照片的存储地址&#xff08;使微信小程序中显示出上传的图片&#xff09;。 1、效果如下&#xff1a; 点击图像后选择图像&#xff1a; 结…

搜维尔科技:【工业仿真】煤矿机械安全事故VR警示教育系统

产品概述 搜维尔科技 煤矿机械安全事故VR警示教育系统 系统内容&#xff1a; 系统采用虚拟现实技术模拟矿井井下机械安全技术及事故&#xff0c;展现井下常见机械伤害事故&#xff0c;表现伤害事故的隐患点&#xff0c;能够模拟事故发生和发展过程&#xff1b;营造井下灾害发…

如何使用 Node.js 发送电子邮件全解和相关工具推荐

大多数Web应用程序都需要发送电子邮件。它可能用于注册、密码重置、状态报告&#xff0c;甚至是完整的市场营销活动&#xff0c;如新闻和促销。本教程解释了如何在Node.js中发送电子邮件&#xff0c;但其概念和挑战适用于您正在使用的任何系统。 你会在 npm 上找到大量与电子邮…

详细UI色彩搭配方案分享

UI 配色是设计一个成功的用户界面的关键之一。UI 配色需要考虑品牌标志、用户感受、应用程序的使用场景&#xff0c;这样可以帮助你创建一个有吸引力、易于使用的应用程序。本文将分享 UI 配色的相关知识&#xff0c;帮助设计师快速构建 UI 配色方案&#xff0c;以满足企业的需…

windows10小皮安装不同版本composer,实现自由切换使用

1、使用phpstudy小皮面板安装composer1.8.5和composer2.5.8两个版本&#xff1b; 2、打开刚才安装的composer安装目录&#xff1a;D:\phpstudy_pro\Extensions 3、打开composer1.8.5版本&#xff0c;修改composer.bat名称为composer1.8.5.bat&#xff1a; 4、打开composer2.5.8…