
難しいと思いますが独自の検索エンジンを作成してみたいと思っています。
検索エンジンといっても自分のWebサイト内を検索するものではなくGoogleやYahoo!、A9のように全世界のWebを対象にした検索を行う検索エンジンのことです。
検索エンジンに関しては知識がないのですがDBと相性がいいPHPで作成できるのではないのかなと思っています。
そこで質問です。
PHPやPerlなどで検索エンジンを作成することは可能でしょうか?
個人が運営している検索エンジンサイトなどはあるでしょうか?
もし検索エンジンを運営することになった場合はどの位のスペックがあるサーバーが必要になってくるでしょうか?
です。どうぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
検索エンジンを個人でphpやperlで作ることは理論上は可能かと思いますが、現実的には厳しいかと思います。
その理由はページの取得にあります。検索エンジンは、大きく分けて2つの部分に分かれます。
・1つは、webページをまわってデータを取ってくる部分。
・もう1つは、検索(要求)された単語やフレーズに応じて、取ってきたwebページのデータから適切なページを選択、表示する部分。
で、本来の検索エンジンでは2つ目(ランキングの評価)が重要なのですが、個人でやる場合には1つ目が非常にハードルが高いです。
例えば、1つのページを取得するのに平均1秒かかるとすると、10億ページを取得するのに約31年もかかります(現在、世界中には数十億ページ以上あるようです)。この部分の高速化は、高速な回線を世界的に多数用意する必要があります。検索対象が日本だけだとしても、億を下らないページがあるでしょうから(最近blog流行ってページ数激増みたいですし)、個人レベルで取得するのはかなり難しいと思います(全ページの巡回だけで数年~数十年かかってしまうでしょう)。
この対策(?)としては、自分では取得せず、大手の取得結果を利用させてもらう考え方があります。
直接的な答えではありませんけど、例えばメタサーチエンジンのceek( http://www.ceek.jp/ )では、検索後をいろんなサーチエンジンに投げて、その結果を取りまとめて表示します。
このように大手の結果を使うのも含めて検討されてはいかがでしょうか?
# それでもとても大変だとは思いますが。
回答ありがとうございました。
Ceek.jpは知りませんでした。これはすごい。個人経営でこれほどのシステムをどのように構成、管理しているのでしょうか?疑問です。
ところで質問です。
Ceek.jpのニュース版のようにいくつか巡回するサイトを指定し、更新されたら見やすくHTMLファイルを作成しほかのサイトに見出しやリンクなどを表示できるようなシステム構成は難しいでしょうか?
No.5
- 回答日時:
> Ceek.jpのニュース版のようにいくつか巡回するサイトを指定し、更新されたら見やすくHTMLファイルを作成しほかのサイトに見出しやリンクなどを表示できるようなシステム構成は難しいでしょうか?
前半のHTMLファイルを作るところまでの部分は、いわゆる「アンテナ」のことでしょうか?RSSが流行る前は、いろんなアンテナソフトがあったと思います。最近はRSSリーダが流行のようですけど。わたしはアンテナとかRSSとか使わないので、どんなソフトがあるかは、すみませんが知りません。
自前で作るにしても、最近はRSSを用意してくれているサイトも多いので、RSSを検討されては如何でしょうか?
後半の「ほかのサイトに見出しやリンクなどを表示できるようなシステム構成」の部分ですけど、管理下にあるサイトであるならば、前半とほぼ同様のプログラムを動かして、更新された時にリンクのみ生成すればできるかと思います。
No.3
- 回答日時:
この辺読むとGoogleクラスの検索エンジンがどのくらい涙ぐましい努力をしてるか良く分かると思います。
http://www.itmedia.co.jp/news/articles/0503/03/n …
初期のGoogleサーバは以下なんかに写真が載ってますね。
http://bb.watch.impress.co.jp/cda/alphageek/
さて、本題です。
>PHPやPerlなどで検索エンジンを作成することは
可能です。やろうと思えばできない事ではありません。
ただし、実用になるスピードで可能か。実現できるサーバ規模で可能か、となると無理なんじゃないでしょうか。
ただし、ぶっちゃけPHPやPerlでは能力的には不足すると思います。実際には、検索エンジン自体は(規模が大きくなれば大きくなるほど)通常の言語で構築する必要があるでしょう。
だけどたとえば
「全文検索システム Namazu」
http://www.namazu.org/
とかだってさすがに世界を相手にするような性能じゃないですからねえ……
理屈だけなら、できますよ。PHPだろうがPerlだろうが。
要するに、HTMLをゲットしてきてその中の言葉を解析して、それをデータベースにぶち込んでいく。検索するときには言葉をデータベースから検索して、それを表示してやればいい。
ただ、規模がとんでもなくでかくなりますからね。
たとえば、Google検索の対象ページ数(サイト数ではなく、1HTMLを1ページと数えると考えて良いのかな?)は約80億以上だそうです。
単純に考えて、一つのページのURLが平均15バイト(つまり15文字)だったとして、全てのURLをリストアップ「だけ」しても1200億バイト=12ギガバイト。
その12ギガバイトに検索で解析した単語との関連付けをやってくわけですから
……世の中の単語って何語あるんでしょう。たとえば広辞苑にある単語だけで23万語。もちろん日本語だけではないわけで……
それを検索できるようにするためには、どうするか……
という事で、さくっとなんか普通のサーバの能力超えちゃう感じです。
Googleなんかはその辺を分散サーバで管理してやらせてたりとかしてるわけですよ。
うん。やっぱ結論出しますけど。
・よほど対象を絞る努力をしないと個人で検索エンジンは無理
・逆に、対象を絞った検索エンジンの提供なら面白いかもしれない。
(たとえばBlog検索なんてのはそういう発想から生まれたものでしょう)
・Googleはとんでもねー(もちろんYahooもとんでもねー)
と言う事になります。
丁寧なご回答まことにありがとうございました。
>単純に考えて、一つのページのURLが平均15バイト(つまり15文字)だったとして、全てのURLをリストアップ「だけ」しても1200億バイト=12ギガバイト。
え~!URLだけでも12GBですか。ん~これは無理どころではないですね。
No.2
- 回答日時:
>PHPやPerlなどで検索エンジンを作成することは可能でしょうか?
検索エンジン自体はPHPやPerlで作れます。が、ロボット型検索エンジンを作るためにはロボットとかクローラなどと呼ばれるプログラムが必要となります。このロボットがWebをリンクをたどりながらページの情報をDBに登録していきます。ロボットはたぶんC言語などのコンパイル型の言語を使用して作られたパイナリプログラムです。
>個人が運営している検索エンジンサイトなどはあるでしょうか?
全世界のWebサイトを対象とした検索エンジンは個人では難しいでしょう。管理の手間やコストからして。
>もし検索エンジンを運営することになった場合はどの位のスペックがあるサーバーが必要になってくるでしょうか?
アクセス数によります。平均同時アクセス数とアクセス時の負荷の統計から見積もりを行います。あなたが検索エンジンを作成して、動作させて、どの程度の負荷がサーバに掛かるのかがわからなければ算出は不可能です。
丁寧なご回答まことにありがとうございました。
問題はやはりロボットの作成なのですね。ん~Cはまったく分からないので自分で開発するには無理が。。でも夢は夢。いつか立てます。たぶん。
No.1
- 回答日時:
素人で申し訳ないですが、
もちろんPHPやPerlで検索エンジンを作成することは可能です。
しかし、ヤフーなどは独自の言語で検索エンジンを作成していると
聞いたこともあります。
大規模なサービスになるとPHPでまかない切れるかは分かりません。
検索サービスには大きくわけて2種類があるようです。
ディレクトリ型…推薦されたサイトをスタッフが手作業で登録
(Yahoo などがそうですね。最近はどうだろう…)
ロボット型…クローラーと呼ばれる巡回システム(ロボット)が
様々なサイトを歩き回り情報収集。
サーバーのスペックもそこそこ必要になってきますが
利用するクライアントの数によって代わってきます。
大規模なシステムの構築になれば複数のシステムを立ち上げ
それぞれデータの整合性をチェックしロードバランサーの導入なども考えなければいけません。
また、クローラーが徘徊する為の大容量の回線も必要になります。
すべてを一つのサーバーで済まそうとすると無理があるかもしれません。
素人の考えで申し訳ないですが必要最低限以下のものが必要なのでは?
・検索システム
・大容量のストレージ ページのキャッシュなどを保存
・クローラーサーバー(巡回ロボット)
・クローラーからのデータを整形する為のサーバー
検索システムや、クローラーは各社が独自のアルゴリズムで
開発されていますので腕の見せ所でしょう。
正規表現に対応したシステムなどがあると面白いですね。
丁寧なご回答まことにありがとうございました。
私が作成したいのはディレクトリ型ではなくGoogleなどが得意とするロボット型です。
しかしざっと返答をみるだけでも個人の領域をはるかに超えているのか分かります。
もうちょっと研究してから検索エンジンを立ち上げてみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
最強のオセロ、リバーシ!
-
PHPができればJavaScriptは...
-
JSPの処理の途中で、JavaScript...
-
エクセルVBA/ Formatで文字列が...
-
csvファイルを読み込み、該当項...
-
リクエスト結果が一瞬しか表示...
-
以下のコードを実行しても、オ...
-
フォルダ内のファイル一覧
-
正整数の半角数字かどうか判定する
-
1つのVBAコードをすべてのコア...
-
javascriptでフォルダ内のファ...
-
if(1){...}とはどういうことで...
-
ACCESS(VBA)の検索結果判定に...
-
正規表現について
-
漢字などを正規表現でパターン...
-
文字数の制限について
-
htmlのfileタグに自動で値を入...
-
デザイン時のVisible=Falseは実...
-
全角カタカナ バリデーション...
-
動的ファイルの最終更新日を取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メニューを外部から呼び出したい
-
会員向けページ アクセス制限
-
Webサイト設計 データの記録
-
HTML5で下記は実現可能でしょう...
-
特定のURLからのアクセスがあっ...
-
教えてください
-
Perl LINE(チャット) 仕組み
-
FlashLiteで通信ゲームを作れま...
-
i-modeページで使用可能ですか?
-
CGIとJavascriptの違いについて
-
数学のjavascript
-
JSONの中でDate.UTCは使えない?
-
最強のオセロ、リバーシ!
-
仮アップ?
-
PHPができればJavaScriptは...
-
Session切れ前にWarningメッセージ
-
ajaxを使用した場合にPHP出力文...
-
javascriptで大きなデータを扱う
-
プログラムの時間を計りたい!!
-
webの文字データの取得
おすすめ情報