最近在看 es 的文档,发现查起 api 来真的很麻烦,很多现在开源的文档都没有查询功能,对于忘了的一些东西,想查询真的有点麻烦,找了很多方法,最后发现了这个工具 Dash (dash 只能在 macOS 上使用,windows 用户可以用 zeal 试试,好像 docset 是可以通用的)。

Dash 是可以提供文档的检索和本地化的功能,十分适合学习之后对文档的查找。Dash 本身和很多开源项目合作,提供了很多的文档下载,其中就包含的 ES:

img

下载之后是变成一个较 docset 的文件,就可以使用了,在搜索框查一下就可以找到你心仪的文档了:

img

如果搜不到也不用怕,我们可以自己制作,非常简单:

1. 找到你要制作的文档的首页地址,如 lucene 的:http://lucene.apache.org/core/8_1_0/index.html ,使用 weget 命令递归把网页全部爬下来:

1
wget -r -p -np -k -P ~/tmp/ http://lucene.apache.org/core/8_1_0/index.html

2. 去 github 上下载个 html2dash 的程序:https://github.com/selfboot/html2Dash 感谢一下这位兄弟 [selfboot] 提供的代码,[当然官网也提供了两个程序 https://github.com/technosophos/dashing https://github.com/godbout/dash-docset-builder ] 剩下的就执行一下转换的命令即可,这里需要注意的是执行的文件目录是 index.html 的目录

1
./html2dash.py -n lucene8.1.0  -i ~/tmp/lucene_green_300.png  ~/tmp/lucene.apache.org/core/7_0_0

-i 表示图片路径,需要是 png 格式,剩下的自己看 github 把,查询效果:

img

使用起来确实很方便,大家可以试试。

更新:

由于官网上也有程序生成 docset 文件 https://github.com/technosophos/dashing 按 github 指引安装一下 dashing 就可以,这个生成出来跟 html2Dash 相比可能更切合 docset 格式些,但是也要你网上的文档格式比较规范。当然这个更简单,配置一下 json 文件几行命令就可以

1. 首先执行安装命令:

1
brew install dashing

2.cd 到你要生成的 docset 文件需要放在的文件夹,执行 create 命令

1
2
cd ~/danvid/tmp
dashing create

3. 你执行完 dashing create 之后会产生一个 dashing.json 文件,vim 编辑一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "elasticsearch-cn-guide",
"package":"elasticsearch-cn-guide",
"index": "index.html",
"selectors": {
"dt a": "Command",
"title": "Package"
},
"ignore": [
"ABOUT"
],
"icon32x32": "favicon.png",
"allowJS": false,
"externalURL": "https://www.elastic.co/guide/cn/elasticsearch/guide/current"
}

这里需要注意的是你要提前下载 icon 图片到你文件夹中 (favicon.png), 还要必须写 "package" 这个属性,不然会生成不了 (我也是开始没命名这个,后面去 issue 里才知道),然后执行一下

1
dashing build tmp

就可以了,tmp 就是开始你要放 docset 文件的文件夹

生成原理简单讲一下 (网上有挺多手工制作教程的,有时间也可以自己写一个~反正我是不想写~哈哈):

  1. Create the Docset Folder;建一个文件夹价格 docset 的后缀
  2. Copy the HTML Documentation;复制 html 文件到 Documentations 文件夹
  3. Create the Info.plist File;创建首页文件
  4. Create the SQLite Index;创建 SQLite 索引表
  5. Populate the SQLite Index;插入索引数据

完事!

[参考]https://kapeli.com/docsets#dashDocset

[参考]https://segmentfault.com/a/1190000000721142