あれをブログに書いたはず…。というのを調べたくなって、これを機に検索機能を入れたlunrというライブラリを使ったクライアントサイドの検索だ。ここから使える。インデックスはブログビルド時に生成したものを静的に配信しているので、あまり重くはないはずだ。

最初設置してみた時は、どうも思ったようには検索できなかった。例えば、「星の王子さま」で検索すると何も引っかからないが、実際には記事がある(例えばこれ)。tokenizeされているので、単語単位でしかヒットしないようだ。「星 の 王子」と分かち書きすればヒットする。そして、lunrの仕様は「複数単語だとOR検索」「ただしぜんぶの単語が含まれる文書のスコアが高くなる」というものだ。

ということで、検索フォームに入力されたものを、lunrで検索する直前に同じ方法でtokenizeすることにした。これで一応、それなりの検索にはなる。ただ「見えないOR検索」みたいになって気持ち悪いので、気が向いたら別のライブラリに入れ替えるかもしれない。

追記:あまりきちんと動いていない。Rustは検索に引っかかり、RubyKaigiも検索できるが、Rubyもrubyもmrubyもダメ。時間ができたら検索の実装入れ替えをしよう。