依然是 15 分钟。简单讲下昨天折腾了一天的东西。
首先是回顾下,博客迁移到了 zola,昨天注意到有一些功能存在缺失,比如搜索。
于是简单做了个搜索页的模板,渲染没问题,但执行搜索的时候遇到了一点麻烦。
其一是 zola 本身编译的时候缺失了中文支持,在 cargo.toml 里把 elasticlunr 库特性里补上 zh 后重新编译就能正常构建索引了。
其二是 elasticlunr.js 居然没有中文语言支持,导致 elasticlunr.js 在加载索引时报错失败。
中间经历了误用 lunr-languages 导致的加载索引失败,注意到之后才发现有个类似的库 lunr.js 和 lunr-languages 带中文支持。
抱着试一试的心情用 lunr.js 加载了 elasticlunr 构建的索引,失败。于是观察了一下 lunr.js 的 api 用法,还有索引的结构。 考虑可以在浏览器端去建立索引?于是又试了一次。
这次问题不大,但加入 lunr-languages 的中文插件后又出现了新的问题:会报错,不能从 undefined 获取 cut 属性。
翻源码读了一下,发现在 node 端运行的时候会导入 @node-rs/jieba 这个库,但这个库没有提供浏览器端 js 支持。翻了一下 npmjs.org 发现 有 wasm 编译的二进制,但这玩意儿用不来,遂放弃。寻找纯 js 实现中注意到中文分词需要一个很大的词库,放前端 load 下来再建立索引就不太现实了。
于是 lunr.js 浏览器端建立索引的方案也放弃了,搜索功能依然不可用。
现在剩下的思路还有几个:
- 转换 elasticlunr 索引格式为兼容 lunr 的索引格式。但存在较大不确定性。
- 使用简单搜索,先上线一个按文章标题过滤的前端搜索方案。
目前来看没有很好的方法解决搜索困难的问题,我寻思得看看其他博客的搜索方案是怎么做的,特别是 hugo。