人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Googleの様に検索を高速で行うための方法について、わかり易く教えてください。
・方法というのは、アルゴリズム、システム、プログラムなどなどについてです。
・インデックスで云々ということは何となく知ってはいるのですが
それが何で早くなるのか?また高速化する方法はそれ以外にあるのかが?です。


●質問者: tsuka115
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● Cherenkov
●10ポイント

これらの本にわかりやすく書いてあると思います。



tsuka115さんのコメント
どーもです。 細かい情報は書籍で調べようかと思ってましたので助かります。 ただ、今回は、とりあえず概念的なイントロ部分を教えて欲しかったんです。 例えばその概念をベースに、わかりにくい部分を書籍を立ち読みしてみて、 わかりやすそうなのを買えますので。

2 ● a-kuma3
●425ポイント ベストアンサー

まず、インデックスの話。

分厚い百科事典を想像してください。
ある言葉について調べようとします。
一ページ目からめくって、その言葉が出てくるかどうかを見ていくと、とても大変です。

索引から探しましょうか。
索引は、アイウエオ順になっているので、最初から順番に見ていかなくても、大体の位置が分かります。
単語を見つけました。
見出しだけではなく、その言葉を内容に含んでいるページも載っています。
探すページを絞り込むことができたので、後は、そのページを順番に見ていくだけです。

検索処理でのインデックスも、概ね、このようなことをやってます。



次に、インデックス以外の高速化の話。
やり方はいろいろありますが、一番大事なのは、分散処理です。

今度は、一冊だけじゃなく、十巻セットくらいの百科事典を想像しましょうか。
索引を使って、どこにありそうなのかを調べるところまでは一緒です。
索引から、一冊だけではなく、複数の巻にあることが分かりました。
ずいぶん絞り込まれているので、同じように順番に調べて行けば良いのですが、もっと早く探す方法はないでしょうか?

おや、弟くんが暇そうにしていますね。
彼にも手伝ってもらいましょう。
同時に二人で調べれば、半分の時間で探せそうです。

実際の検索処理では、複数の検索処理を大量にこなさなくちゃいけないので、こんなに単純ではありませんが、原理は分かりやすいですよね。


tsuka115さんのコメント
どーうもです 索引・・・なるほど、それはわかりやすいですね。 しかし索引の単語を作るのって大変ですよね 全ての単語に対して索引を作ったら、結局文字数は同じ単語の使用部分しか 文字数は減らないですし、逆にその単語を使っているページ数は増えていくので データ的にどうなんでしょう。 それから、日本語って英語と比べて単語の切れ目がわかりにくくてかなり大変ですね。 分散処理・・・なるほど。GPUによる画像処理みたいなもんですね。

a-kuma3さんのコメント
「インデックスをどう作るか」という面では、それ用のアルゴリズムが研究されてます。 例えば、[http://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90:title=形態素解析] とか。

tsuka115さんのコメント
なるほど? なかなか難しそうなお話ですね

3 ● kitiko
●5ポイント

googleアルゴリズムは、最近こんなものを取り入れたようですね。

検索結果の表示順位を決定するアルゴリズムにサイトの応答速度を取り入れると発表した。
Googleの検索アルゴリズムは、検索語との関連性や被リンク数など、

さまざまな要素に基づいてランキングを決定している。

Googleはサイトの応答速度がユーザーにとって非常に重要と考えることから、

この要素をアルゴリズムに加味することにしたという。


つまりあまりに重いサイトは検索から除外するというアルゴリズムを導入したということです。

http://netsupman.com/affili/296.html


tsuka115さんのコメント
どーもです。 これはどちらかというと検索の高速化の方法というより、SEO関連のお話ですね。 しかし、そんな情報があるとは知りませんでした。 遅いサーバーは使うなってことですか・・・

4 ● oil999
●20ポイント

インデックス作成型全文検索という仕組みで行います。

まず、処理の対象となるコンテンツを単語に分解します。
そして分解した単語をインデックスと呼ばれるデータベースに登録していきます。

あとは、単語をキーにしてデータベースを検索していきます。

この2段階の処理に対しては、さまざまなシステムが出回っています。
古典的なシステムとしてはNamazuがあります。
http://www.namazu.org/


tsuka115さんのコメント
どーもです Namazuは使ったこと有りますが、内容は良くわかってませんでした。 要はデータベースで検索すると早いということだと思いますが なぜデータベースにすると早くなるのでしょう? そういうもんだと理解するしか無いんでしょうか?

oil999さんのコメント
データベースは、キー(全文検索の場合はインデックスにしている「単語」)を高速に検索するという仕組みを内蔵しているからです。

5 ● Artisan
●20ポイント

検索エンジンはさまざまなアプローチがあり、また様々な技術の寄せ集めですのでどうしても解説を行おうとすると下記URLのように総華的になりがちかと思います(勉強に時間がかかる)。また、Googleのようなとしてしまうと少し技術的に特徴があるので、初学者はますます混乱してしまうかもしれません。

連載:検索エンジンはいかにして動くのか?|gihyo.jp … 技術評論社
連載:検索エンジンを作る|gihyo.jp … 技術評論社
ASCII.jp:Googleはなぜ的確に探せるのか?

私は専門家ではないのですが、

・転置インデックス
・Suffix Array

に絞って調べるのがよいとおもいます。これらアルゴリズムで索引さえ作れば、ごくごく簡単な検索エンジンくらいは作れるのではないかと思います。(ただ、このアルゴリズムは恐らくGoogle使ってないんだけどね…)

また調べれば分かると思いますが、転置インデックスで検索エンジンを作ろう的なブログエントリもあるので是非とも参考にしてみてください。

検索エンジンを利用したいだけならば、Apache Solrを始めとする優れたオープンソース・ソフトウェアがあるので参考にしてみてください。


tsuka115さんのコメント
どーもです なるほど、なかなか奥が深いのがわかりました。 特に今すぐ何か作ろうとかそういうのではないんですが、ふとした疑問で そのカラクリを少しでも知っていれば将来何かの時に役立つかも知れない という理由で質問してます。

1-5件表示/6件
4.前の5件|次5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ