検索エンジンを構築したい場合、どうすれば開始できますか?[閉まっている]


9

誰かが私を正しい方向に向けることができますか?私はコードを書く経験は本当にありませんが、私は速い学習者です。簡単だと言っているわけではありませんが、誰かが私を助けてくれることを願っています...


6
コードを記述した経験がない場合は、最初にコードを記述する方法を学んでみませんか?検索エンジンの構築は、プログラミングに不慣れな人にとってはやり過ぎの一種です。
Terence Ponce、

3
テレンスが言うように、それはプログラミングに新しい人のためのものではありません。どんなに優れた検索エンジンでも、かなり複雑な作業になる傾向があります。Googleが非常に大規模であり、非常に難しい作業をかなりうまくこなす理由があります。ベテランのプログラマーでさえ、ビルド済みのものを使用することを好む傾向があります。あなたがそれが何のために欲しいかについていくつかの考えを与えるならば、多分私たちはあなたを正しい方向に向けることができます。
2011

2
小さなプロジェクトから始めます。検索エンジンの構築には、大量のコードが含まれます。また、検索エンジンのすべてのデータをどのように収集しますか?さらに多くのコードと大規模なインフラストラクチャが必要になります。本当に、小さなプロジェクトから始めて、上手くいかないと、イライラするだけです。
ジェームズ

1
この本は、検索エンジンとは何か、そしてどのように構築されているかを理解するのに役立ちました:nlp.stanford.edu/IR-book
devnull

回答:


16

私は昔、昔はブログを書いていたのですが、Web上にはないので、ここにあります。:

検索エンジンを書く方法

Darbol Rowseがprobolgger.netで、 "How to"に関するグループライティングプロジェクトを開催しています。これは私が定期的に読んでいる数少ないブログの1つなので、変更のために読む価値のある何かを書いてみませんか。むしろ、私が喉にHugo Chavesを刺すと脅すことになる私の標準的な暴力的な暴言です。

「検索エンジンの書き方」を書くことにしました。このトピックを選択した理由は2つあります。

  1. これに関する良い情報はウェブ上にはあまりありません。
  2. 私は現在、私のクライアントの1つに1つ作成しています。

私のクライアントはかなりの規模のオンライン小売業者であるため、私は彼らのサイトだけでなく、より具体的には彼らのサイトで販売されている製品だけをWeb全体で検索するのではありません。それでも、インターネットの検索に使用されるより複雑なものを書くために同じテクニックを使用することができます。これは技術系ブログではないので、技術的なことはあまり詳しく説明しません。ハードウェア/処理能力の要件やWebクロールについても説明しません。

私はかなり単純な手法を使用しています。3つのフィールドを持つテーブル(tblKeywords)があります。

  1. Itemid(ウェブ検索を行う場合、これはURLになります)
  2. KeyWord(インデックス付きキーワード)
  3. 重み(これは1〜100の数値であり、この数値が大きいほど、キーワードが持つ(重み)の意味が大きくなります) * PK = ItemID + KeyWord

私が最初に行うことは、関連するあらゆる場所から個々の単語を収集することです。私のクライアントのために、製品の表から言葉を引き出します。具体的には、Itemid、ItemName、ItemShortDescription、ItemLongDescription、Manufacturer、ManufacturerSKU、Category1、Category2、Category3などのフィールドから。Webページのインデックスを作成している場合は、ページのテキスト、ページタイトル、URL、またはインデックスが作成されているページにリンクしている他のページのリンクからデータを取得できます。

重みの値は、キーワードがどこから来たかによって決まります。たとえば、私の場合、アイテムの製造元のSKUの重みは100になりますが、アイテム名の単語の重みは25になります。ItemLongDescriptionの単語の重みは5になる場合があります。ページタイトルからの太さは75のウェイトになる可能性がありますが、ページテキストからの太字の単語は10のウェイトになる可能性があります。単語が複数回または複数の場所で繰り返されている場合は、そのたびにウェイトを合計しますそれが発生します。たとえば、単語「Shirt」がItemId = 12345の2か所から来て、ItemName(25の重み)であり、ItemLongDescription(Weight of 5 x2 = 10)に2回出現する場合、単語「shirt」はItemIdの合計の重みが35になります。 = 12345。

誰かが「ピンクのシャツ」を検索した場合、「ピンク」または「シャツ」という単語のすべてのインスタンスをテーブルで検索し、重みを合計します。合計重量が最も高いアイテムを上に表示します。

SQL:

Select Itemid, sum(weight) as totWeight from tblKeywords
group by itemId having keyword in ('pink','shirt')

基本的な(そして高速な)検索エンジンです。もちろん、句読点、HTMLコード、「and」、「if」、「or」などの意味のないキーワードを取り除くなど、やるべきことは他にもあります。これはキーフレーズの検索には対応していませんが、フレーズの開始位置と終了位置がわかれば、同様のシステムをフレーズに使用できます。


いい答えに感謝します。製品をグループ化するために何を提案しますか?つまり、さまざまなWebサイトから100万件のクロールされた製品ページがあるということです。あなたは、さまざまなウェブサイト間でグループ同じ製品にしたい:programmers.stackexchange.com/questions/134292/...
MonsterMMORPG

@モンスター-アイテムのManufacturer \ SKUの組み合わせはどうですか?
モロン

このデータはEtilize
Morons

理解できなかったので、もう少し説明してもらえますか?ありがとうございました。
MonsterMMORPG

3
「OK」の実用的な答え。ただし、これは「情報検索」として知られる研究分野全体を無視します。「正しい方向を向いている」という点では、IRは私の方が良かったでしょう。
Darknight

3

検索エンジンはWebクローラーに基づいて構築されています。結果を表示するWebサイトを開発する前に、これらの吸盤の1つを構築する方法を理解する必要があります(それを実行するには、高速で効率的なデータベースが必要です)。


3
検索エンジンはWebクローラーの出力を消費する可能性がありますが、それ以外の場合は互いにほとんど関係がありません。さらに、SQLのさまざまなデータベースの高速で効率的なデータベースが、この取り組みに大いに役立つとは考えられません。検索エンジンは通常、SQLの型にはまったく適合しない、逆ファイルインデックススキーマを使用して構築されています。
Marcelo Cantos、2011

@Marcelo Cantos:逆ファイルインデックス作成は複雑に聞こえます:-0-私の答えを明確にするのを助けてくれてありがとう!
palbakulich、2011


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.