为你的CFBlog添加全文搜索功能
全文搜索功能已上线,实现方法源自:https://knightyun.github.io/2019/03/04/articles-search。
经过几次修改,终于确定了一个较为简单的实现方式。步骤如下:
1. 拉取最新代码
拉取最新代码才能方便的使用此功能。
搜索功能需要拉取所有文章的标题、内容等,并以search.xml的格式提供服务。最新代码中添加了search.xml的生成。
2. 启用搜索
在OPT的codeBeforHead
参数中添加如下代码:
<!--搜索实现:https://knightyun.github.io/2019/03/04/articles-search-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/gh/Arronlong/cdn@master/cfblog/search/search.css" rel="stylesheet">
<script>
$(function() {
let searchhtml=\`
<div id="searcharea" class="widget widget_links">
<div class="search">
<i class="material-icons search-icon search-start">search</i>
<input type="text" class="search-input" placeholder="Searching..." />
<i class="material-icons search-icon search-clear">clear</i>
<div class="search-results"></div>
</div>
</div>
\`;
$(".sidebar div").first().before(searchhtml);
$.getScript("https://cdn.jsdelivr.net/gh/Arronlong/cdn@master/cfblog/search/search.js");
});
</script>
3. 优化搜索实现
由于默认实现是实时读取kv中的数据,而且是扫描所有博文,所以会无故消耗很大一部分的kv读取次数(同理,sitemap.xml也同样存在此问题)。所以这里推荐使用github的action来自动保存最新的search.xml和sitemap.xml
①. 配置cf的workers的变量
在cf的workers中新增了3个变量
third_token
ACCOUNT中新增了的变量,默认为cfblog,可自行修改。
作用:开放token,当前仅允许访问/admin/search.xml,/admin/sitemap.xml时可用,在cfblog_token的头信息中传递。
在github的action中使用,用于自动更新search.xml和sitemap.xml
详见: https://github.com/Arronlong/cfblog-plus/blob/master/.github/workflows/actions-cfblog.yml
search_xml_url
OPT中的可选变量
作用:指定search.xml外部链接
如果不设置,则实时读取kv中的数据,并生成指定格式的xml,详见https://github.com/Arronlong/cfblog-plus/blob/master/index_plus.js#L335
为了避免浪费不必要的kv读取次数,所以推荐对此类请求进行缓存。
后台的“设置”页面最下面,提供了导出功能。可以自行导出,并放在自己的服务器上或者通过github的action提交到github项目中。
由于导出是后台功能,所以需要校验用户名密码或者通过third_token
参数进行导出。例如:
# 采用用户名+密码的方式
auth=$(echo -n "用户名:密码" |base64)
curl 'https://你的域名/admin/search.xml' -H 'Authorization: Basic ''$auth'' >search.xml
# 为了安全,采用token的方式
curl 'https://你的域名/admin/search.xml' -H 'cfblog_token: 变量third_token的值' >search.xml
推荐的方式:通过github的action自动导出,并提交到github上。
sitemap_xml_url
OPT中的可选变量
作用:指定sitemap.xml外部链接。其他同上
②. 配置github的action
按下图配置Secret变量
变量说明:
CFBLOG_TOKEN
:值为third_token
变量对应的值
CFBLOG_HOST
:值为你的域名,不含https://,末尾也不要加/
CFBLOG_BRANCH
:值为指定一个分支名称,比如xml。最终生成的search.xml和sitemap.xml自动提交到该分支。
action是默认每天18点执行一次。
以上3个Secret变量配置好了,点击自己项目的star这个图标,从“star”变成“unstar”就会触发action运行了。可以在“Action”这里查看。
等待片刻,返回项目主页后,即可看到已经自动新建了一个分支。切换到该分支下,即可看到里面有search.xml和sitemap.xml了。
这个时候可以点击search.xml和sitemap.xml文件,再点击“Raw”按钮,将地址复制出来,就可以作为search_xml_url
和sitemap_xml_url
变量的值了。