欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

为Jekyll+GitHub Pages添加全文搜索功能

程序员文章站 2022-03-02 08:13:05
动态演示如下: [上传失败, 请自行搜索原文] 源码库: "program in chinese/team_website" 找到此JS工具: "christian fei/Simple Jekyll Search" , 按安装说明先完成了对题目/类别/日期的搜索, 本地运行不错. 再接再厉添加了对 ......

为Jekyll+GitHub Pages添加全文搜索功能

动态演示如下:
[上传失败, 请自行搜索原文]

源码库:

找到此js工具: christian-fei/simple-jekyll-search, 按安装说明先完成了对题目/类别/日期的搜索, 本地运行不错. 再接再厉添加了对描述和全文(post.content)的搜索, 详见全文索引.json

发现生成的json文件中, 特殊字符如引号使得json语法出错:
为Jekyll+GitHub Pages添加全文搜索功能

发现前人对同样问题的解决方法"full-text search" donot work! · issue #63 · christian-fei/simple-jekyll-search, 另参考christian-fei/simple-jekyll-search, 在_plugins下添加脚本特殊字符过滤.rb:

module jekyll
  module c字符过滤器
    def remove_chars_cn(输入)
      输入.gsub! '\\','\'
      输入.gsub! /\t/, '    '
      输入.gsub! '@',''
      输入.gsub! '$',''
      输入.gsub! '%',''
      输入.gsub! '&',''
      输入.gsub! '"',''
      输入.gsub! '{',''
      输入.gsub! '}',''
      输入
    end
  end
end

liquid::template.register_filter(jekyll::c字符过滤器)

module名称如果没有大写字母开头, 报语法错误如下, 猜测原因与scala疑似中文命名问题后续类似, 不过ruby好像将中文字符认作了非大写的:

特殊字符过滤.rb:2: class/module name must be constant (syntaxerror)

方法remove_chars_cn未能中文, 由于jekyll的liquid脚本语言貌似不支持unicode标识符, 会报错:

liquid warning: liquid syntax error (line 6): unexpected character 删 in "{{ post.description | strip_html | strip_newlines | 删除特殊字符 }}" in 全文索引.json

在本地运行通过后, 将包括插件在内的修改提交到github后, 发现网站加载json文件时报错"invalid json", 查看取json的请求响应内容后, 各种尝试后初步认定是插件未成功运行, 一通搜之后发现, github pages不支持任意插件的运行:

解决方法就是本地jekyll生成网站源码后, 将网站源码提交到repo里.

参考configuration options_config.yml中将输出目录改为docs:

destination: docs

再将原本的jekyll文件都移到repo根下, 运行生成后提交, 搞定.