私は以前から Web 検索エンジンの開発に興味がありました。始めるのに適した場所は何ですか? Lucene のことは聞いたことがありますが、私は Java にあまり詳しくありません。他に良いリソースやオープンソース プロジェクトはありますか?
それが大事業であることは理解していますが、それは魅力の一部です。私は次の Google を作成するつもりはありません。関心のあるサイトのサブセットを検索するために使用できるものにすぎません。
私は以前から Web 検索エンジンの開発に興味がありました。始めるのに適した場所は何ですか? Lucene のことは聞いたことがありますが、私は Java にあまり詳しくありません。他に良いリソースやオープンソース プロジェクトはありますか?
それが大事業であることは理解していますが、それは魅力の一部です。私は次の Google を作成するつもりはありません。関心のあるサイトのサブセットを検索するために使用できるものにすぎません。
検索エンジンにはいくつかの部分があります。大まかに言えば、絶望的に一般的な方法で(皆さん、より良い説明やリンクなどを追加できると思われる場合は、自由に編集してください):
クローラー。これは、Web を経由してページを取得し、ページに関する情報を中央のデータ ストアに保存する部分です。テキスト自体に加えて、アクセスした時間などの情報が必要になります。クローラーは、特定のドメインにヒットする頻度を認識したり、robots.txt の規則に従うなど、十分にスマートである必要があります。
パーサー。これは、クローラーによって取得されたデータを読み取り、解析し、必要なメタデータを保存し、ジャンクを破棄し、次に何を取得するかについてクローラーに提案する可能性があります.
インデクサー。パーサーが解析したものを読み取り、Web ページで見つかった用語に逆インデックスを作成します。NLP テクニックを適用して概念のインデックスを作成したり、物事を相互リンクしたり、同義語を挿入したりするなど、思いのままにスマートにすることができます。
ランキングエンジン。「apple」に一致する数千の URL が与えられた場合、どの結果が最適かをどのように判断しますか? ただ、インデックスはその情報を提供しません。テキスト、リンク構造、およびその他の見たい部分を分析し、いくつかのスコアを作成する必要があります。これは、完全にオンザフライで行うことも (非常に難しいことです)、事前に計算された「専門家」の概念に基づいて行うこともできます (PageRank などを参照)。
フロントエンド。何かがユーザーのクエリを受け取り、中央エンジンにアクセスして応答する必要があります。これには、結果のキャッシュ、おそらく他のソースからの結果の混合などについて賢くする必要があります。それには独自の問題があります。
私のアドバイス - これらのうちどれに最も関心があるかを選択し、Lucene や Xapian、またはその他のオープン ソース プロジェクトをダウンロードし、上記のタスクのいずれかを実行するビットを取り出して、それを置き換えてみてください。うまくいけば、もっと良いもので:-)。
役に立つと思われるリンク: "Agile web-crawler"、エストニアの論文 (英語) Sphinx Search engine、インデックス作成および検索 API。大規模な DB 向けに設計されていますが、モジュール式でオープンエンドです。 「Information Retrieval 」は、マニング氏らによる IR に関する教科書です。インデックスがどのように構築されているか、発生するさまざまな問題、およびクロールに関する議論などの概要がよくわかります。無料のオンライン バージョン (今のところ)!
Xapianは別のオプションです。Lucene の一部の実装よりもスケーリングが優れていると聞いたことがあります。
nutchをチェックしてください。これは、Lucene を作成したのと同じ人 ( Doug Cutting ) によって書かれています。
最大の部分はサイトのインデックス作成だと思います。ボットを作成してインターネットを精査し、そのコンテンツを解析します。
友人と私は、Google やその他の検索エンジンがどれほど素晴らしいものであるかについて話していました。0.5 秒未満で何百万もの結果が得られますか? クレイジー。よく検索される項目の検索結果があらかじめ設定されているのではないかと思います。
編集: このサイトはかなり面白そうです。
Wikia のオープン ソース検索エンジンなど、既存のプロジェクトから始めます。
[私の理解では、Wikia 検索プロジェクトは終了しました。しかし、既存のオープンソース プロジェクトに参加することは、この規模の事業を容易にする良い方法だと思います。]
情報検索の背後にある理論と、検索エンジンの実装の背後にある技術的な詳細について学ぶことに興味がある場合は、Ian Witten、Alistair Moffat、Tim C. Bell による著書Managing Gigabytesをお勧めします。(開示: Alistair Moffat は私の大学の指導教官でした。) 今では少し古くなっていますが (初版は 1994 年に発行され、第 2 版は 1999 年に発行されました。現在、ギガバイトを管理することの何がそんなに難しいのでしょうか?)、根底にある理論は依然として健全であり、索引付けと、索引付けおよび検索システムでの圧縮の使用についての優れた入門書です。
検索エンジンにも興味があります。Apache Hadoop MapReduce と Apache Lucene の両方をお勧めします。Hadoop Cluster による高速化が最善の方法です。
Lucene のポートがあります。Zend には、無料で入手できるものがあります。この簡単なチュートリアルをご覧ください: http://devzone.zend.com/node/view/id/91
プログラミングにはあまり関心がなく、結果に関心がある場合は、少し異なるアプローチがあります。Google Custom Search Engine API を使用して構築することを検討してください。
利点:
短所: