総ポスト数が100を超えているらしい。で、昔のメモを検索したら、かなりイマイチなことを今更知った。というわけで、やる気出して、

  • 検索精度の改善
  • 検索ワードのハイライト

に対応した。

元々は、hugo-PaperModが使用しているFuse.jsをデフォルトの設定で使用していた。Fuse.jsは非常に良くできた全文検索ライブラリで、これを日本語に対応させれば良い、とあたりをつけていたけど、結局オプションのパラメーターを少しいじって満足した。具体的には、Thresholdをかなり下げた。つまり検索精度は根本的には改善していない。また不都合を感じたら、真面目に日本語対応すると思う。

searchの結果には検索位置も含まれているため、ハイライトすること自体も簡単。返り値の構造体がパッとはわからなかったけど、Copilotに聞いて解決。

以下のように、Web版CopilotでsearchのExampleを出して返り値を確認した。

const books = [
  {
    title: "Old Man's War",
    author: {
      firstName: 'John',
      lastName: 'Scalzi'
    }
  }
];

const fuse = new Fuse(books, {
  includeScore: true,
  includeMatches: true,
  keys: ['title', 'author.firstName']
});

// 検索結果の例
const result = fuse.search('john');
/* 結果:
[
  {
    item: {
      title: "Old Man's War",
      author: {
        firstName: 'John',
        lastName: 'Scalzi'
      }
    },
    refIndex: 0,
    score: 0.4, // スコアは0~1の範囲。0が完全一致
    matches: [
      {
        indices: [[0, 3]], // "John" の位置
        key: "author.firstName",
        value: "John",
        norm: 0.5
      }
    ]
  }
]
*/