JiroSearch が検索結果を表示するときに、 本文の一部を表示している。
一般に、検索結果の一部を表示するには、 本文を適当な長さのブロック(チャンク、パラグラフ)に分割し、 それぞれに対して、 与えられた検索語に対する評価を行い、 関連性が高いものを選択する、 という処理を行う。 このためのクラスが Lucene には用意されている。 ( org.apache.lucene.search.highlight.Highlighter )
ただし、 現在の版の JiroSearch は、 このクラスを使っていない。 文章の真ん中にある検索語の前後を表示する という単純なロジックで抜き出しているのだ。 例えば「検索」という言葉が文章中に5個出現したら、 3番目の「検索」という文字の前後を表示しているのである。
最初は、 見つかった検索語の前後を表示してみたのだが、 サイトの多くがヘッダやフッタのような定型的な内容を含んでいて、 意外とそこに検索語があることが多いので、 あまりいい結果が得られない。 ということで、真ん中あたりを出した方がいいだろ、 という安直な発想でそのような処理に変更したのだ。 結果はご覧の通りで、そう悪くはないような気がする。
現在の処理は、 検索語の個数の真ん中に注目しているのだが、 もう一つ似た考え方で、 テキストの真ん中に一番近いもの、という方法もある。 JiroSearch のソースでは、 jp.co.crm.jirosearch.util.TextUtils クラスの getExcerpt メソッドがその処理になっているので、 ここを変更すれば抜き出す内容を変えることができる。