折腾 elasticlunr 和 lunr

作于: 2024 年 4 月 8 日,预计阅读时间 3 分钟

依然是 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 浏览器端建立索引的方案也放弃了,搜索功能依然不可用。

现在剩下的思路还有几个:

目前来看没有很好的方法解决搜索困难的问题,我寻思得看看其他博客的搜索方案是怎么做的,特别是 hugo。

/杂谈/