検索エンジンを作る

第13回 検索結果の表示

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

検索エンジンは検索機能以外に,どのような検索結果が表示できるかという観点もとても大事です。検索結果がわかりにくければ,どんなに検索エンジンが高度な機能を持っていても価値が半減してしまいます。組織の内部などで利用するエンタープライズサーチの分野では,検索結果をいかに直感的でわかりやすい表示にするかに鎬が削られています。今回は,FINDSPOTにどのような検索結果の表示のための機能を盛り込んだかについて解説します。

検索結果の表示

FINDSPOTでCGIベースの検索システムを作る場合には,検索エンジン側とCGIの検索クライアント側で,検索インターフェースを手分けして提供することになります。

図1 CGI検索システムのしくみ

図1 CGI検索システムのしくみ

検索エンジンと検索クライアントCGIの間は,図1のようにTCP/IPを使った独自のプロトコルを使って通信します。検索エンジンと検索クライアントCGIは同じサーバで動作させることもできますし,負荷分散のために別のサーバで動作させることも可能です。今回は,検索結果の表示のために,検索エンジンがCGIのような検索クライアントに対して,この独自プロトコルを通じてどのような機能を提供しているかについて紹介します。

検索結果の件数

何件見つかったかという情報は,まだ検索条件を変更して絞り込みが必要なのか,あるいは十分に絞り込めたのかを判断する大事な材料です。FINDSPOTの開発前にさまざまな検索エンジンを調べてみた時には,検索結果の件数を表示できない検索エンジンが意外に多いということがわかっていましたので,FINDSPOTの実装に際しては,検索結果の件数を確実に検索クライアントに返せる構造としました。

基本的には,検索クライアントが検索エンジンに対してこれまで解説してきたような検索式を投げると,検索エンジンは検索結果のヒット件数を返すというシンプルなプロトコルになっています図2)。

図2 検索エンジンとクライアントのやりとり(1)

図2 検索エンジンとクライアントのやりとり(1)

次に,検索クライアントは検索エンジンに対して何番目の検索結果を欲しいというリクエストを送り,この要求に対して検索エンジンは,指定された検索結果の詳細情報を返すようにしています図3)。

図3 検索エンジンとクライアントのやりとり(2)

図3 検索エンジンとクライアントのやりとり(2)

CGIなどでは,1ページに10件分程度の検索結果を表示するが一般的ですが,この1ページの表示用データを作るために,表示に不要な部分のデータは検索エンジンから検索クライアントに送りたくないというのが,このようなプロトコルにした大きな理由です。もし,検索結果のデータをすべて検索エンジンから検索クライアントに送るようなプロトコルだった場合には,10万件ヒットした場合には,10万件ぶんの検索結果のデータを検索エンジンから検索クライアントに送ることになり,とてもコスト高のシステムになってしまいます。

検索結果のヒット数を元にした分析

エンタープライズサーチの分野では,検索結果のヒット数だけ知りたいという特殊な用途が存在します。たとえば,特定の検索語で文書データを検索し,各セクションごとにヒット数を集計すれば,どのセクションがその検索語の分野について専門的に取り組んでいるかが予想できます。あるいは,文書の作成者ごとに検索語のヒット数を集計すれば,誰がその検索語について詳しいかという傾向をつかむことができます。

他にも,ブログを対象とした検索システムで,日ごとに特定の検索語で検索を行った結果を集計すれば,その検索語がブログで言及された日ごとの遷移をつかめます。これを数字ではなくグラフ化すれば,注目度が上がって来ているトピックなのか,下がり始めたトピックなのかといった分析もできます。

このような,検索結果のヒット数を元にした分析機能は,一部の検索エンジンですでに作り込まれた形で製品化されていますが,今後もっともっと発展していく可能性を感じます。FINDSPOTでは,今のところ,このようなヒット結果の分析機能を単品で提供するのではなく,分析機能をCGIなどでカスタマイズして開発するための手段/しくみ/材料の提供に重きを置くようにしています。

著者プロフィール

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

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

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

著書

コメント

コメントの記入