首先要安装node.js,顺便把源改成淘宝的
再安装gulp
npm install --global gulp
然后克隆Raneto项目,安装依赖、编译
git clone https://github.com/gilbitron/Raneto.git && cd Raneto && npm install && npm run gulp
然后启动玩一下
npm start
在浏览器输入http://ip:3000访问,一个默认模板就出来。
通过观察Raneto根目录下的package.json,发现启动的js文件是example/server.js。在example目录下,有一个config.default.js是配置文件,另外有content目录用于存放md格式的知识库文章。
添加一篇文章试试。往example/content目录放入一个md文件,访问Raneto的首页的时候 Main articles 分类下就会自动出现这个文件名命名的文章,一点就可以看到全文内容。另外,也可以在md文件的最开始加上一段注释
/*
Title: My Page Title
Description: Optional description for search engines
*/
来自定义文章标题而不是直接用文件名,以及自定义给搜索用的描述,或者用sort字段定义文章的排序序号。
目前的Raneto版本,默认是打开了登录的,默认用户名admin,密码password。默认浏览文章不需要登录,而修改删除文章需要登录。这些都可以通过修改config.default.js配置。
Raneto标准版本不支持中文的搜索。我自己研究了一下,不支持中文的原因在于lunr.js,要让它支持中文,一种是修改 lunr-languages,只需要增加一个lunr.zhcn.js文件,即可支持中文分词,但是看了一下代码,分词的方法比较简单,可能效果不是太好
https://cloud.tencent.com/developer/article/1175078
还有一种就是基于nodejieba的分词,分词效果会比较好。
安装nodejieba的时候要加上--unsafe-perm参数,否则jieba编译的时候会报错没有权限建目录。在package.json增加 unsafe-perm 配置没有作用不知道为什么。
npm install --save nodejieba --unsafe-perm
然后就是用 https://github.com/codepiano/lunr.js 的版本,替换原来的lunr.js。node_modules/ 中的lunr可以不用管
cd app/core/
wget https://raw.githubusercontent.com/codepiano/lunr.js/master/lunr.min.js
修改Raneto/app/core/search.js
注释原来的lunr加载
// instance = require('lunr');
// require('lunr-languages/lunr.stemmer.support')(instance);
// require('lunr-languages/lunr.multi')(instance);
// config.searchExtraLanguages.forEach(lang =>
// require('lunr-languages/lunr.' + lang)(instance)
// );
instance = require('./lunr.min.js');
注释默认设置加载的lunr配置
const lunrInstance = getLunr(config);
const idx = lunrInstance(function () {
// this.use(getStemmers(config));
this.field('title');
this.field('body');
this.ref('id');
documents.forEach((doc) => this.add(doc), this);
});
重启Raneto就可以了。这个jieba分词真不错,不单中文分词好用,英文分词也比lunr原版好。原版在搜索node.js的时候都搜索不全。而config.default.js中的excerpt_length参数,只用于搜索结果展示的摘要,不会影响全文搜索。