技术类博客接入 Docsearch 搜索
2022-08-05 · 809 chars · 5 min read
大家平时在看一些开源项目的网站或者文档的时候,应该会注意到,很多站点的搜索功能都是 Docsearch 提供的。
搜索对于文档类的站点,应该说是刚需了。但是自建搜索引擎非常麻烦、成本高昂;使用类似 google 的站内搜索,又过于通用,体验很差。Docsearch 的出现就很好的解决了站内搜索的各种痛点。
我的博客已经接入成功了,大家点击右上角的 🔍 体验。由于过于好用,今天必须写篇笔记推荐一下。
申请#
申请 Docsearch 要满足三个条件:
- 网站必须可以公开访问的
- 网站必须是开源项目的技术文档或者技术博客
- 申请人必须是站点的拥有者、网站稳定可用
符合条件的站点可以在这里 https://docsearch.algolia.com/apply/ 提交申请,之后就是漫长的等待,因为它需要人工审核的,我记得我大概是等了半个多月。注意留意邮件。如果长时间没有回复,也可以在这里 https://discourse.algolia.com/ 发帖问一下
申请成功后会收到一封邮件,里面会有 appId
,apiKey
等,还会有简单的接入教程。
建议大家看一下文档和 github 上的 sdk,选择适合你的方式接入。
使用#
我没有按照官方推荐的、最简单的方式接入,因为有两点不满足我的需求:
- Docsearch 官方提供的
@docsearch/react
存在 ssr/ssg 和 csr 渲染不一致的问题 - 无法自定义搜索按钮
Note
这两个问题不知道官方解决了没有,大家还是先试试看,不行了在参考我的方案
首先,安装 js 库和 css
npm i @docsearch/js @docsearch/css
然后,使用一个隐藏的容器初始化 docsearch
import React, {useEffect} from "react" import docsearch from "@docsearch/js" const AsyncSearch: React.FC<{}> = () => { useEffect(() => { docsearch({ container: "#docsearch", appId: "<your appId>", apiKey: "<your apiKey>", indexName: "<your indexName>", }) }, []) return <div style={{width: 0, height: 0, overflow: "hidden"}} id="docsearch" /> } export default AsyncSearch
最后,在你的自定义按钮上绑定 click
事件,简介触发 docsearch 的 click
const handleClick = useCallback(() => { const $search = document.querySelector < HTMLElement > "#docsearch button" if ($search == null) { window.alert("搜索组件初始化中,请稍后再试!") return } $search.click() }, [])
大功告成!
设置爬取频率#
接好一段时候后,我发现新发布的文章迟迟没有被爬虫索引到。安装官方的说法,爬虫应该一周来一次的,但据我观察并没有。
How often will you crawl my website?
Crawls are scheduled at a random time once a week. You can configure this schedule from the config file or trigger one manually from the Crawler interface.
这时候可以手动设置,打开爬虫的后台,点击你的站点名称
然后点击右侧菜单的 Editor,添加 schedule:
new Crawler({ schedule: "every 7 day at 3:00 am", // 加上这一句,保存即可 })
可以根据更新频率选一个合适的时间间隔。之后到了指定的时间,Algolia Crawler 就会重新爬取并索引你的站点了