検索エンジンを作る

第13回 検索結果の表示

この記事を読むのに必要な時間:およそ 2 分

検索結果の表示内容

検索結果の表示内容は,検索クライアント側の画面デザインの主要要素となります。FINDSPOTではカスタマイズ性を重要視していますので,特定の画面デザインを前提にした構造にはしていません。

検索クライアントからの検索結果の要求に対して,書誌データの保存されたSQLデータベースのテーブルに記録してある文書プロパティ情報は,どのプロパティについても検索結果として検索クライアント側に返せるしくみにしています。

さらに,連載第10回で説明した文書フィルタの出力結果のXMLを検索エンジンのサーバ側にスプールしておき,検索クライアントの要求に応じて,XMLデータをクライアント側に返せるしくみを提供しています。こちらからは,SQLデータベースのテーブルに保存していない本文などの情報も取得できます。

このようにして,検索エンジンから取得した文書プロパティ情報や,フィルタ出力のXMLを元に検索結果の表示内容を作成できます。文書プロパティ情報は,FINDSPOTに用意されているURLやタイトルなど標準的なもの以外にも,文書フィルタを作成・カスタマイズすることで比較的自由に変更・追加を行える構造としています。

ダイジェスト

Googleの検索結果には,検索語がヒットした近傍の文書が表示されています。FINDSPOTを開発する際に,非常に重要だと感じたのが,この文書のどんな文でヒットしたのかがすぐに把握できる機能です。
FINDSPOTではこれをダイジェストと呼んでいます。

FINDSPOTではN-gramのインデックス上に文字列の出現位置情報を保持しています。検索はすべてこのインデックス情報を元に行うため,検索が終わった時点では文中の検索語の出現位置の情報が特定できています。先ほど,文書フィルタの出力結果のXMLを検索エンジンのサーバ側にスプールできることを説明しましたが,検索エンジンは,このXMLから検索語の出現位置前後の文を抜き出し,検索クライアントに返す機能を提供しています。この機能を使うと,Googleの検索結果とよく似た表示機能を持つCGIを簡単に作ることができます。

検索結果の表示順

Googleなどでは外部から参照されるページはランキングを上げるという独自のロジックで,ランキングの高いものから順に表示するシステムを構築しています。このように,検索結果の表示順をどうするかというのは検索システムにとっては使い勝手に大きく影響する要素です。

多くの検索エンジンでは,検索結果の表示順についてカスタマイズするしくみまではなかなか提供されません。そこで,FINDSPOTではもう一歩踏み込んで,さまざまな検索結果の表示順に対応できるしくみを実装しています。

最初に実装したのが,検索結果を特定の文書プロパティを元にソートして,このソート順あるいは逆順に結果を検索エンジンから検索クライアントに取り出す機能です。たとえば,文書の作成日時をキーにソートを行えば,特定の言葉が含まれる一番最近の文書,一番古い文書などをすぐに特定することができます。

次に実装したのが,1つの文書内に検索語がいくつ存在したかという個数を数え,個数の多いものから順に検索エンジンから検索クライアントに結果を送る機能です。この方法は「検索語が文中に数多く存在すること」がその検索語についてよく言及された,あるは説明された文書であるとの仮定に基づいています。

昨年,客先からの要望で実装したのが,複数の文書プロパティをキーにした検索結果のソート機能です。それまでは,文書フィルタの出力に複数のプロパティから合成されたソートキー用のプロパティを設けることで対応していましたが,もっとさまざまな表示順を動的に指定するために実装することにしました。現在のFINDSPOTは,ソート用のキーのプロパティ数については制限がなくなり,複数のキーでソートした順で検索結果を返すことができます。

著者プロフィール

工藤智行(くどうともゆき)

有限会社サイパック取締役社長。システム構築・管理のコンサルティング,ローカライゼーション,文書処理や障害者向けソフトウェアを中心とするプログラミングを長年手がける。 近著『UNIXプログラミングの道具箱』『システム管理現場の鉄則FreeBSD編』等

URLhttp://www.cypac.co.jp/

著書

コメント

コメントの記入