9.ロボット型サーチエンジンの作り方
Googleのようなロボット型全文検索サーチエンジンの作り方を簡単に紹介します。
決して2足歩行ロボットの作り方ではないですよーーー
最近は組み立てキットがあるみたいですけど・・・高くてかえないですね。

1.サーチエンジン必要なサーバーのスペック
検索のアルゴリズムやデータ量にもよりますが
最低でも500MHz以上のCPUと256MB以上のメモリが必要です。
検索結果をキャッシュすれば多少遅いマシンでも何とかなるかもしれません。
データベース自体が1000件程度・10MB以内のごく小規模なもので
アクセス数が多いサイトだとPentiumIIIが複数個搭載されているマシンのほうが
最新のシングルプロセッサマシンに比べて速いかもしれません。
つまり・・・
絶対的な検索速度を上げるなら最新のなるべく高速なCPUのマシン、
検索自体の負荷が少ない場合でリクエスト数をたくさんこなすなら
最新でなくとも複数のCPUがのったマシンが良いです。

そこで私のお勧めですが
A.Prime Magnate GD (\81,690)
コストパフォーマンス的には一番いいのではないかと思います。
余計な機能はついてないですし。
HT(ハイパースレッディング)対応のPentium4 2.8GHzなので
Dualマシンのように扱うことが出来、たくさんのリクエストにもより高速に対応できます。
また512MBのメモリも搭載しておりカスタムでRAIDも組めるようです。
将来性を考えるとPrime Magnate LM(¥88,800)のほうがいいかもしれません、
B.Prime A Regulus (\39,690)
AMDのAthlonXP 2500+256MBなのでとりあえずはじめてみたい方におすすめです。
でもHT対応のものに比べてアクセス数が激増したときにきつくなるかもしれません。
メモリは必要に応じて増やしてください。
C.Prime Monarch LD-E (\169,800)
将来デスクトップマシンとして使いまわしたい場合や
やむなくサーバー兼クライアントマシンにする場合にいいかもしれません。
でもLinuxとかはドライバがあるのかなあ・・・
ちなみにクライアントを兼用するのはあまりお勧めできません。

これらのマシンだと10000URL,50MBほどの検索用データなら
逐次検索のような力に任せた検索でなんとか実用レベルだと思います。
組み方によってはアクセスが一気に集中した場合、大幅に検索速度が低下します。。
(アクセス集中時の対策は4番の項目に書きます。)
DBMSと連携させたような高度な組み方をすれば十分いけるでしょう。
ただDBMSを使うとメモリがもっと必要になるかもしれませんが・・・
1000万URL以上のように本格的にやる場合は・・・個人で出来るのかなあ(^^;;;;

これでも飽き足らない人はXeonやOpteron搭載サーバー専用マシンを導入してください。
自分で組んだほうが安くつくかもしれませんが信頼性は落ちます。

自作機を組むならDOS/Vパラダイス♪

2.OS
検索プログラム等が動作する条件のもとに好きなものを導入してください。
Windows等のGUIを搭載したOSは無駄なリソースを消費するのでお勧めできません。
個人的にはFreeBSDがおすすめです。

3.ロボットの作成
ロボットの仕組みを知れば簡単に作ることが出来ます。
基本中の基本しか解説しないので付加機能は自分で作ってください。

ロボットの大まかな仕事はこのようになります。あくまで一例ですが・・・
A-1.下準備
A-2.最初のURLや巡回リストに手動登録されたURLアクセスする
A-3.巡回リストにしたがってひたすら巡回

アクセス&データ取得ルーチン
B-1.まずrobots.txtにアクセスする
B-2.アクセス制御があればそれに従う->アクセス禁止なら抜ける
B-3.URLにアクセスする
B-4.ロボット制御のメタタグを解析->アクセス禁止なら抜ける
B-5.HTMLを解析してリンクは巡回リストに追加,本文は検索用DBに登録する

特に注意するべきこと
アクセス制御には必ず従うこと・間隔を空けてアクセスすること
アクセス制御に従わないロボットや一気にサーバーからデータを収集するロボットは非常に嫌われます。
相対リンク(例: ./top.htm )の解析を確実に行うこと
相対リンクの解析に失敗すると
http://a/b/c/
http://a/b/b/c/
http://a/b/b/b/c/
(以下省略)
といったようにとんでもないことになるので特に気をつけてください。
場合によっては収集先のサーバーをダウンさせることになります。

サーバーによっては404(Page Not Found)にもかかわらず
200が返ってエラーページが表示されることがあるのでその判定が必要です。

自分で作る場合はEUC-JPで組むといいでしょう。
Perlだとsjisで組んだ場合検索がまともに出来ません。

4.検索プログラムの作成
仕様によって大きく異なるので省略します。
grepコマンドを利用したり逐次検索で組む場合はキャッシュを導入すると
かなり高速化が可能となります。
また、アクセスが集中した場合の速度低下(CPUの消費・メモリの大量消費によるスワップへのアクセス)
を防ぐ目的で検索部はデーモンにしておきましょう。
特にスワップした場合はシステム全体の速度が大幅に低下します。
検索結果のキャッシュを利用して複数同時検索を実現するといいかもしれません。
なるべくメモリにデータを格納してディスクへのアクセスは抑えましょう。
N文字インデックスとかはよく分からないので自分で勉強してください。
PHP+DBMSで組んでもいいかもしれません。

5.最後に
とりあえず仕組みが分からない人には無理だと思います。
Namazuのような全文検索ソフトを利用する手もあります。
私は使い方が分からないので断念しましたけど・・・
初めての人はこちらを利用したほうがはやいと思います。

それではがんばって構築してくださいね。

もどる