検索エンジンを作る
第1回 こんな検索エンジンが欲しい!
2007年4月27日
本連載では,筆者が約4年間に渡って開発を続けているFINDSPOTという検索エンジンを紹介していきます。FINDSPOTは約1年前より商用での提供を行っていますが,近いうちにオープンソースでの公開を計画しています。今回は,開発を行うに至ったきっかけについてのお話です。
きっかけは顧客の要望から
時は2003年,今から約4年前に遡ります。筆者は当時,客先のイントラネット構築プロジェクトを手がけていました。イントラネットでは,全文検索は目的の情報に素早くたどり着くために必須の機能です。フリーの全文検索エンジンとして有名なNamazuは,当時の筆者にとってすでに数年間愛用し,手に馴染んだソフトウェアでしたので,客先のイントラネットの構築でもNamazuを使って検索機能を実現していました。
ところが,客先より人名や特殊な業界用語などで完全一致で検索できないケースがあるという指摘を受けました。Namazuは茶筌もしくはKAKASIの形態素解析を利用し,わかち書きをした上でインデックスをかける方法なので,うまく検索できない人名や用語について形態素解析用の辞書をメンテナンスする必要があります。客先の担当者が辞書のメンテナンスを行う形での運用は難しいということで,完全一致の件は懸案事項となってしまいました。
他にも,Namazuでは機能的に難しい要求が次々と出てきました。その当時の懸案事項や要求事項を思い出すままに列挙してみると,次のようになります。
- 複数インデックスを串刺し検索をしたときに重複が無いようにしたい
- 日本語以外に,英語,中国語,韓国語などの多言語を同時に扱いたい
- Unicodeの情報を検索したい
- 曖昧検索を実現したい
- 同意語による検索を行いたい
- 社内で使っている外字も検索できるようにしたい
- 検索結果のヒットした箇所をハイライト表示したい
- 夜間バッチではなく,リアルタイムにインデックスを更新したい
- Microsoft Office文書やPDF文書も検索したい
- Outlookのメッセージファイルなどの特殊なファイルも検索対象にしたい
- Exchange Serverのパブリックフォルダのデータも検索したい
- 検索対象のアクセス権を反映して,利用者のアクセスできる範囲のみ検索したい
- 検索機能をイントラネットに埋め込み,十分にカスタマイズしたい
- 100万件超のデータ量でも現実的なインデックス作成性能や検索性能を出したい
既存の検索エンジンの不満点
Namazuによる対応も検討しましたが,すぐに実現が困難であることがわかり,他の検索エンジンで良いものがないかを調べる作業を始めました。ConceptBase IV(ジャストシステム), Oracle Text, SharePoint 2003(マイクロソフト), MyQuick(インフォコム), CyberFinder(サイバーソリューションズ)など,主だった商用の検索エンジンを次々と試用してみましたがどうもピッタリとあてはまるものが無いのです。
たとえば,ConceptBase IVでは日本語の曖昧検索や同義語による検索は優れていましたが,英語の検索機能が良くないことがわかりました。またエンジン内部がシフトJISによって実装されていたため,Unicode情報の検索はできませんでした。さらに100万件程度のデータ量に対してインデックスをかけると数日かかってもインデックスが生成されないなどの問題が見られました。インデックスの作成中はサーバの負荷が高くなるため,検索も非常に遅くなる現象が見られました。
Oracle Textは検索エンジンのフレームワークが提供されるので自由度は大きい反面,十分な検索スピードが得られず,データベースの負荷が非常に重いという問題や,UnicdodeとシフトJISとのマッピングに不自然な部分があるなどの問題がありました。またフレームワーク以外の部分は新たに開発しなければならないのに,十分な情報が提供されていませんでした。
SharePoint 2003は機能の面では良い線まで行っていたのですが,日本語化に難があったり,データ量が多くなるとインデックスの作成に失敗するなどの問題が見られました。サービスパックやホットフィックスを当て続けてようやく利用できるレベルになりました。SharePointはCGIのインターフェースを備えているのですが,そのままでは使いにくいためカスタマイズに挑戦してみました。Microsoftから公開されているドキュメントにひととおり目を通してみましたが,カスタマイズに必要な情報が決定的に不足していました。MSDN経由で不足している情報を入手して何とかカスタマイズした検索画面を実現しましたが,保守性に乏しく継続運用には向きませんでした。
多くの商用検索エンジンでは,検索画面のデザイン変更程度のカスタマイズは可能でしたが,操作性やエンジンの動作まで含むようなカスタマイズとなると,どの検索エンジンも対応できないというのが実情だったのです。 検索画面の向こう側は,どの検索エンジンもブラックボックスになっていましたが,実は手を加えたいと思う部分は,どのエンジンもこのブラックボックスの部分だったのです。もちろん,高額なカスタマイズの費用を支払えば対応してもらえる可能性はあったのですが,予算面での制約もあり,前述の懸案事項は結局の所,持ち越しとなってしまいました。
この件をきっかけに,社内のイントラやバックオフィス,社外公開情報の検索(フロントオフィス)などに使える柔軟なカスタマイズ性を備えた高機能な検索エンジン,できたらソースコードが公開されているような検索エンジンが欲しいという強い意識が筆者に芽生えたのです。

