想在Jekyll博客上添加一个静态搜索,这样方便搜索相应的关键字。虽然自己也把博客归类,并给每篇博客贴上标签,但是个人还是比较喜欢折腾,总感觉有个搜索功能是非常好的一件事情。于是上网也搜集了一下相关资料,发现Jekyll博客添加搜索功能还是稍微有点麻烦的,而且有些功能还不是很好。只能搜索英文关键字,兼容性也有点欠缺,有的也只是实现博客标题以及日期搜索。
个人大致归类了一下,在Jekyll博客搜索主要有一下几种实现:
1) 利用Plugin + JavaScriot的方式;
2) 利用Google提供的Google Custom Search方法,这个操作很简单,功能很好,但在国内来说不是很稳定,不太实用;
3) 实用JQuery搜素静态文本的API来解决。
下面我介绍一种非常简单的站内搜素——Tapir。这也是我参考网上Dan’s的一篇文章叫《使用Tapir实现jekyll的站内搜索功能》。
从官网可以得知,Tapir是专门为静态页面,比如博客等设计出来的一种站内搜素功能。可以通过简单的RSS订阅创建索引,并返回JASON格式的搜素结果,并且对中文支持也非常棒。下面我介绍一下如何部署。
如果你的博客还没有创建RSS feed,请在你的根目录下创建一个名为atom.xml的文件,添加一下内容:
---
layout: nil
title : Atom Feed
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{{ site.title }}</title>
<link href="{{ site.production_url }}/{{ site.JB.atom_path }}" rel="self"/>
<link href="{{ site.production_url }}"/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>{{ site.production_url }}</id>
<author>
<name>{{ site.author.name }}</name>
<email>{{ site.author.email }}</email>
</author>
{% for post in site.posts %}
<entry>
<title>{{ post.title }}</title>
<link href="{{ site.production_url }}{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<id>{{ site.production_url }}{{ post.id }}</id>
<content type="html">{{ post.content | xml_escape }}</content>
<summary type="html">{{ post.description | xml_escape }}</summary>
</entry>
{% endfor %}
</feed>
之后在你的html页面head标签中添加下面代码:
<link href="/atom.xml" type="application/atom+xml" rel="alternate" title="Sitewide ATOM Feed">
若果你已经含有atom.xml
这个文件,在格式entry
里添加summary
,也就是每篇博客的摘要部分。下面我介绍一下上面需要注意的几个注意事项:
1)首先得现在你的配置文件_config.yml
中配置一下属性site.production_url、site.JB.atom_path、site.author.name、site.author.email,不然就无法使用这些参数属性,可能会影响后面搜索功能的使用。如果你不想设置,可以直接在上面选项中填写,比如{{ site.title }}可以写一个你自己喜欢的名称。以下是我设置的内容,可以参考一下:
title : lym的博客
author :
name : lym
email : luyueming1989@gmail.com
github : https://github.com/lym406365619
production_url : http://luyueming.info
JB :
BASE_PATH : false
atom_path : /atom.xml
2) 在使用post.description选项时,在你需要发表的md文件里添加description选项,比如我这篇博客的设置:
配置好RSS feed后,你可以在本地运行Jekyll,访问http://loaclhost:4000/atom.xml看看你本地的RSS文件是否有问题。如果出现你所有的文章以及摘要,那说明你打配置文件没有出错。接着将你的修改好的项目提交到Github上吧。
Tapir的官网为http://tapirgo.com,进入官网后,在Your RSS feed选项中填写atom.xml的访问网址,比如我的就是http://luyueming.info/atom.xml。这里需要注意的是,你可以提交带有http的网址,也可以提交不含http的网址,因为生成的token并不是一样的。不过经本人测定,还是选择带有http的那个url,不然在你部署完成之后,搜索的时候可能会出现重复的两条记录,即同一篇博文出现两次。之后在下面选项填好你的E-mail地址,点击大按钮GO!就可以帮你自动生成一个token以及一个secret token。这边我们只需要记下第一个token就行,生成页面如下所示。
在你需要搜索的界面加上一个search框,代码如下:
<form class="navbar-search pull-right" action="search.html">
<input type="text" class="search-query" placeholder="Search">
</form>
由于搜索用到了JQuery,需要加入两个JS文件jquery.min.js
和jquery-tapir.min.js
。由于search.html是在加载时执行搜索,所以这两个JS文件必须在header中加载,我的代码如下:
<script src="/js/jquery-1.6.1.min.js">
<script src="/js/jquery-tapir.min.js">
你可以在Github上下载这两个文件,使用git clone
命令
$ git clone git@github.com:TapirGo/jquery-plugin.git
由于上面的action为search.html
。在根目录下创建该文件,内容如下:
---
layout: default
title: 搜索结果
---
{% include JB/setup %}
<divclass="post_cont">
<h1>搜索结果</h1>
<div id="search_results">
</div>
<script>
$('#search_results').tapir({'token': '519992c33f61b05b19000d6f'});
</script>
</div>
上面的红色字体就是之前生成的token,用你生成的值代替它就行了。
按照上述方法部署之后,应该就能在站内实现全局静态搜索了。
Copyright ©2013-2015 LYM Power by Github. Base on Jekyll-Bootstrap.