Elasticlunr in Zola

Zola の検索機能には Elasticlunr.js が使われており、デフォルトで日本語に対応していない

hata published on
4 min, 687 words

Categories: web

検索エンジン 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 の書き方。

  • ※ 実際にはバッククオート「\」は不要。

それでもまだ エラーになる。 しょうがないので、本腰入れて取り組むことに。

続きます。 → /posts/japanese-full-text-search-on-zola/