VuePress 博客优化之开启 Algolia 全文搜索

简介: 由于 VuePress 的内置搜索只会为页面的标题、h2 、 h3 以及 tags 构建搜索索引。 如果你需要全文搜索,可则以使用 Algolia 搜索,本篇讲讲如何申请以及配置 Algolia 搜索。

0.png


前言


《一篇带你用 VuePress + Github Pages 搭建博客》中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档


由于 VuePress  的内置搜索只会为页面的标题、h2 、 h3 以及 tags 构建搜索索引。 如果你需要全文搜索,可则以使用 Algolia 搜索,本篇讲讲如何申请以及配置 Algolia 搜索。


Algolia


Algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库搜索服务,并且其服务能以 API 的形式方便地布局到网页、客户端、APP 等多种场景。


像 VuePress 官方文档就是使用的 Algolia 搜索,使用 Algolia 搜索最大的好处就是方便,它会自动爬取网站的页面内容并构建索引,你只用申请一个 Algolia 服务,在网站上添加一些代码,就像添加统计代码一样,然后就可以实现一个全文搜索功能:


1.png


申请


搜索服务申请地址:docsearch.algolia.com/apply/


打开后填写地址、邮箱和仓库地址等信息,这里注意,网站需要是公开可访问的:


2.png


填写完后,等待一段时间(我等了三天),如果申请通过,我们就会收到邮件:


3.png


此时需要回复邮件,告诉自己就是网站的维护者,并且可以修改代码:


4.png


然后第二天就会收到包含 AppId 等所需信息的邮件:


5.png


默认主题


如果你用的是 VuePress 的默认主题,VuePress 直接提供了themeConfig.algolia选项来用 Algolia 搜索替换内置的搜索框:


// .vuepress/config.js
module.exports = {
  themeConfig: {
    algolia: {
      apiKey: '<API_KEY>',
      indexName: '<INDEX_NAME>'
      // 如果 Algolia 没有为你提供 `appId` ,使用 `BH4D9OD16A` 或者移除该配置项
      appId: '<APP_ID>',
    }
  }
}
复制代码


你只用如此简单的配置即可实现全文搜索:


6.png


搜索为空


如果你搜任何数据,都显示搜索不到数据,那很可能是爬取的数据有问题,我们登陆 www.algolia.com/ 打开管理后台,点击左侧选项栏里的 Search,查看对应的 indexName 数据,如果 Browse 这里没有显示数据,那说明爬取的数据可能有问题,导致没有生成对应的 Records:


7.png


如果没有数据,那我们就查下爬取的逻辑,打开爬虫后台: crawler.algolia.com/admin/crawl…,点击对应 indexName 进入后台:


8.png


如果显示成功爬取,也有 Monitoring Success 的数据,但 Records 为 0,那大概是爬虫提取数据的逻辑有问题,点击左侧选项栏中的 Editor,查看具体的爬虫逻辑:


9.png


pathsToMatch 这里如果是https://ts.yayujs.com/docs/**,但你的网址都是 [https://ts.yayujs.com/learn-typescript/**](https://ts.yayujs.com/docs/**)开头的,那这里大概就是会提取错误,修改一下,然后点击右侧的数据进行测试:


10.png


如果能像这样提取到数据,就说明没有什么问题了,点击右上角的Save,然后切换回 Overview,点击右上角的 Restart crawling,我们重新爬取一下数据:


11.png


如果 Records 这里有数据,那搜索的时候基本也会有数据了。


其他主题


如果你用的不是 VuePress 的默认主题,就比如我用的是 vuepress-theme-reco,它的搜索栏是自己实现的,所以添加上述的配置是不会有效果的,这个时候就需要遵照邮件中的方法,手动添加 CSS 和 JavaScript 文件,然后在加载完毕的时候调用提供的 API。


我们需要先修改下config.js


module.exports = {
    head: [
      [
        'link', { href: "https://cdn.jsdelivr.net/npm/@docsearch/css@alpha", rel: "stylesheet" }
      ],
      [
        'script', { src: "https://cdn.jsdelivr.net/npm/@docsearch/js@alpha" }
      ]
    ]
}
复制代码


然后修改.vuepress/enhanceApp.js文件:


export default ({ router, Vue, isServer }) => {
  Vue.mixin({
    mounted() {
      // 不加 setTimeout 会有报错,但不影响效果
      setTimeout(() => {
        try {
          docsearch({
            appId: "43GX903BPS",
            apiKey: "feff649032d8034cf2a636ef55d96054",
            indexName: "ts-yayujs",
            container: '.search-box',
            debug: false
          });
        } catch(e) {
          console.log(e);
        }
      }, 100)
    },
  });
};
复制代码


注意其中的 container,参考 docsearch 的官方仓库,这里提供的不是 input 输入框的选择器,而是一个挂载节点,比如 div 的选择器。


此时展示效果如下:


12.png


样式跟现有的主题有些不统一,不过没关系,我们可以修改 .vuepress/styles/index.styl覆盖目前的样式,比如我的修改代码为:


.search-box .DocSearch.DocSearch-Button {
    cursor: text;
    width: 10rem;
    height: 2rem;
    color: #5b5b5b;
    border: 1px solid var(--border-color);
    border-radius: 0.25rem;
    font-size: 0.9rem;
    padding: 0 0.5rem 0 0rem;
    outline: none;
    transition: all 0.2s ease;
    background: transparent;
    background-size: 1rem;
}
.search-box .DocSearch-Button-Container {
    margin-left: 0.4rem;
}
.search-box .DocSearch-Button .DocSearch-Search-Icon {
    width: 16px;
    height: 16px;
    position: relative;
    top: 0.1rem;
}
.search-box .DocSearch-Button-Placeholder {
    font-size: 0.8rem;
}
.search-box .DocSearch-Button-Keys {
    position: absolute;
    right: 0.1rem;
}
.search-box .DocSearch-Button-Key {
    font-size: 12px;
    line-height: 20px;
}
复制代码


系列文章


博客搭建系列是我至今写的唯一一个偏实战的系列教程,预计 20 篇左右,讲解如何使用 VuePress 搭建、优化博客,并部署到 GitHub、Gitee、私有服务器等平台。本篇为第 24 篇,全系列文章地址:github.com/mqyqingfeng…


微信:「mqyqingfeng」,加我进冴羽唯一的读者群。


如果有错误或者不严谨的地方,请务必给予指正,十分感谢。如果喜欢或者有所启发,欢迎 star,对作者也是一种鼓励。



目录
相关文章
|
6月前
|
自然语言处理 JavaScript 前端开发
使用Pagefind为VitePress文档添加离线全文搜索能力
前言 VitePress 相信大家都或多或少听说过或者用过了 默认 UI相比 VuePress2.x 好看,启动速度也快(由Vite驱动,当然VuePress也可以切换构建引擎至Vite) 做内容定制也相对简单,笔者的很多静态文档站点(使用VuePress1.x),文章内容多的时候启动非常的慢,于是就从之前的 VuePress 迁移到了 VitePress,并做了一个博客主题 @sugarat/theme => 之前也有过介绍一个简约风的VitePress博客主题 但是 VitePress 官方目前还没有内置开箱即用的搜索能力(相关PR还在施工中)
|
资源调度 JavaScript 前端开发
VuePress 博客优化之拓展 Markdown 语法
「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。
405 0
VuePress 博客优化之拓展 Markdown 语法
|
存储 JavaScript 开发者
VuePress 博客优化之增加 Vssue 评论功能
本篇讲讲如何使用 Vssue 快速的实现评论功能。
479 0
VuePress 博客优化之增加 Vssue 评论功能
|
6月前
|
搜索推荐 前端开发 Ruby
blog-engine-02-博客引擎jekyll-jekyll 博客引擎介绍
这组链接提供了多个静态博客引擎的对比和教程,包括Jekyll、Hugo、Hexo、Pelican、Gatsby、VuePress、Nuxt.js和Middleman。Jekyll是一个基于Ruby的静态网站生成器,适合专注于写作的用户,强调简单、快速和灵活性。安装Jekyll需先安装Ruby,然后通过gem命令安装Jekyll和相关插件。创建新网站、启动本地服务器预览、写文章和定制样式是使用Jekyll的基本步骤。
|
存储 API 开发工具
Hexo博客功能扩展 - 图床介绍和迁移
上面就是所有的图床使用了,可以看到图床的选择还是很多的,这里不推荐渣浪的库来存自己的图片,比较推荐使用稳定的SM.MS或者路过图床这种比较稳定而且运行时间比较久的网站,并且对于使用用户有比较好的支持
208 0
|
JavaScript 搜索推荐 前端开发
为什么你应该看官方文档而不是搜索博客文章
为什么你应该看官方文档而不是搜索博客文章
85 0
|
存储 JavaScript 安全
VuePress 博客优化之增加 Valine 评论功能
在 《一篇带你用 VuePress + Github Pages 搭建博客》中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档。本篇讲讲如何使用 Valine 快速的实现评论功能。
259 0
VuePress 博客优化之增加 Valine 评论功能
|
资源调度 监控 JavaScript
VuePress 博客优化之添加数据统计功能
在 《一篇带你用 VuePress + Github Pages 搭建博客》中,我们使用 VuePress 搭建了一个博客,最终的效果点击查看:TypeScript4 中文文档。今天我们给博客添加数据统计功能。
732 0
VuePress 博客优化之添加数据统计功能
|
搜索推荐 JavaScript 算法
VuePress 博客之 SEO 优化(三)标题、链接优化
本篇讲讲 SEO 中的一些细节优化。
402 0
VuePress 博客之 SEO 优化(三)标题、链接优化
|
存储 消息中间件 前端开发
如何在自己的项目中引入ElasticSearch搜索引擎?
在大多数系统中,都需要支持搜索的功能,以简单博客系统为例,虽然说Mysql也可以通过模糊查询匹配到对应的数据,但是效率实在太低。这个时候就需要拿出分布式搜索引擎ElasticSearch了。本博客重点在于ES的集成使用,因此前端采用最简单的方式呈现,大家只需要关注后端逻辑即可。(本博客基于ES7.6.1,和ES6.X版本有较大差异)