日本語検索対応
VitePressに検索機能を加えるには、docs/.vitepress/config.mts
のthemeConfig
の中に以下の設定を追加します。
ts
search: {
provider: 'local',
}
これでminiSearchと呼ばれるクライアントサイドの検索機能が使えるようになります。英語の単語はこれで検索できますが、日本語で検索するとヒットしないものがでてきて、うまく動作しません。これは検索用のインデックスを作成する際にスペースコードを単語の区切りとして認識しているためのようです。当然、他の言語でも困っている人はいて中国語の対応についての情報を見つけたので、それを参考に日本語検索用の設定をしてみたら動きました。
ts
search: {
provider: 'local',
options: {
miniSearch: {
options: {
tokenize: (term) => {
if (typeof term === 'string') term = term.toLowerCase();
const segmenter = Intl.Segmenter && new Intl.Segmenter('ja-JP', { granularity: 'word' });
if (!segmenter) return [term];
const tokens = [];
for (const seg of segmenter.segment(term)) {
// @ts-ignore
// ignore spaces
if (seg.segment.trim() !== '') tokens.push(seg.segment);
}
return tokens;
},
},
},
},
}
Intl.Segmenterを使っている方法のため、対応していないブラウザーだと動かない可能性があります。