为你的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_urlsitemap_xml_url变量的值了。