Elasticlunr in Zola
Zola の検索機能には Elasticlunr.js が使われており、デフォルトで日本語に対応していない
検索エンジン Elasticlunr.js🔗
Zola の検索機能には Elasticlunr.js が使われているようです。
Lightweight full-text search engine in Javascript for browser search and offline search.
Elasticlunr.js は Lunr.js の拡張で、機能を落としてより軽量に全文検索機能を提供しているそうです。
https://github.com/getzola/zola/blob/b2354c6cd8c44c99ab4978702915bdf9eddfa6f9/components/search/Cargo.toml#L8
日本語の有効化🔗
ドキュメントに記事がありました。
https://www.getzola.org/documentation/content/multilingual/
注:デフォルトでは、中国語と日本語の検索インデックスは含まれていません。 zola を使用してビルドすることにより、サポートを含めることができます。 cargo build --features search/indexing-ja --features search/indexing-zh。 また、辞書が非常に大きいため、中国語のインデックスを有効にするとバイナリサイズが約 5 MB増加し、 日本語のインデックスを有効にするとバイナリサイズが約 70 MB増加する ことにも注意してください。
まず、ビルドしなきゃいけないの 面倒だ 楽しいな。
日本語サポートを有効化して Zola をビルドする。🔗
混乱しないように事前に Homebrew の Zola コマンドを切っておこう
zola -V
#=> zola 0.14.1
brew uninstall zola
zola -V
#=> zsh: command not found: zola
git clone https://github.com/getzola/zola.git
cd ./zola
# ... wait a few minutes ...
ls -l target/debug/zola
# Windows なら target/debug/zola.exxe
target/debug/zola -V
#=> zola 0.14.1
ビルド成果物のバイナリは 127 MB でした。 大きいのかよくわからないけど、ローカルで使うコマンドだから転送したりしないし、この程度なら特に気にすることはないだろう。
このバイナリをパスのとおったところに配置すれば OK 。 私の場合は以下のようにした。
mkdir -p ~/bin
cp target/debug/zola ~/bin/
# an example adding path command
# echo 'export PATH="$HOME/bin:$PATH"' > .zshenv
exec /bin/zsh -l
zola -V
#=> #=> zola 0.14.1
which zola
#=> /Users/hogehoge/bin/zola
さて、いざこのコマンドでサイトをビルドしてみると、日本語検索がやはり動かない。
1つは、使っている DeepTohughts の Theme が、次の箇所で英語用のファイルを決め打ちしてしまっているからのようだ。
https://github.com/RatanShreshtha/DeepThought/blob/main/templates/base.html#L206
<script src="\{{ get_url(path='search_index.en.js') \}}"></script>
しかたないので、とりあえずやっつけだが templates/base.html
というファイルを作って、 custom js を追加ロードするようにしてみる。
{% extends "deep-thought/templates/base.html" %}
<script src="\{{ get_url(path='search_index.ja.js') \}}"></script>
{% endblock %}
↑の記法は custom_js
block だけを置き換える Zola の書き方。
- ※ 実際にはバッククオート「
\
」は不要。
それでもまだ エラーになる。 しょうがないので、本腰入れて取り組むことに。