Bir arama motoru oluşturmak isteseydim, nasıl başlarım? [kapalı]


9

Birisi beni doğru yöne yönlendirebilir mi? Gerçekten kod yazma deneyimim yok ama hızlı öğreniyorum. Kolay olacağını söylemeye çalışmıyorum ama umarım biri bana yardım edebilir ...


6
Kod yazma konusunda deneyiminiz yoksa, önce kod yazmayı öğrenmeye ne dersiniz? Bir arama motoru oluşturmak, programlamaya yeni giren biri için aşırı derecede abartılıdır.
Terence Ponce

3
Terence'ın dediği gibi, programlamaya yeni başlayanlar için bir şey değil. Herhangi bir iyi olan herhangi bir arama motoru oldukça karmaşık bir iş parçası olma eğilimindedir, Google'ın bu kadar büyük olmasının bir nedeni vardır, oldukça iyi bir iş çıkarırlar. Tecrübeli programcılar bile önceden yapılmış bir şey kullanmayı tercih ediyor. Ne istediğinize dair bir fikir verirseniz, sizi doğru yöne yönlendirebiliriz.
Orbling

2
Daha küçük bir proje ile başlayın. Bir Arama Motoru oluşturmak büyük miktarda kod içerir. Arama motorunuz için tüm verileri nasıl topluyorsunuz? Çok daha fazla koda ve devasa bir altyapıya ihtiyacınız olacak. Gerçekten, lütfen küçük projelere başlayın ve çalışın yoksa hayal kırıklığına uğrayacaksınız.
James

1
Bu kitap, arama motorlarının ne olduğunu ve nasıl oluşturulduğunu anlamama yardımcı oldu: nlp.stanford.edu/IR-book
devnull

Yanıtlar:


16

Ben ne zaman geri dönmek için kullanılan bir blog için bu yazdım .... artık web üzerinde değil yani işte burada! :

Arama motoru nasıl yazılır

Probolgger.net de Darren Rowse, "Nasıl Yapılır" konusunda bir Grup Yazma Projesi düzenliyor. Bu, düzenli olarak okuduğum birkaç blogdan biri, bu yüzden neden bir değişiklik için okumaya değer bir şey yazmıyorum, daha ziyade boğazda Hugo Chaves'i bıçaklamakla tehdit edeceğim standart şiddet aralığım var.

"Arama motoru nasıl yazılır" yazmaya karar verdim. Bu konuyu iki nedenden dolayı seçtim:

  1. Web üzerinde bu konuda çok iyi bilgi yok.
  2. Şu anda müşterilerimden biri için bir tane yazıyorum.

Müvekkilim önemli boyutta bir çevrimiçi perakendecidir, bu yüzden tüm web'i sadece kendi sitelerinde, daha özel olarak sadece kendi sitelerinde satılık ürünleri aramıyorum. Hiçbiri daha az aynı teknikler internette arama yapmak için kullanılan daha karmaşık teknikler yazmak için kullanılamaz. Bunun bir teknoloji blogu olmadığını biliyorum, bu yüzden teknik özelliklerin çok derinine gitmeyeceğim, ne de donanım \ işlem gücü gereksinimlerini veya web taramasını tartışmayacağım.

Oldukça basit bir teknik kullanıyorum, üç alana sahip tablo (tblKeywords) var:

  1. Itemid (Bir web araması yapıyorsanız bu URL olur)
  2. KeyWord (Dizine Eklenmiş Anahtar Kelime)
  3. Ağırlık (bu, 1-100 arasındaki sayısal değerdir, bu sayı ne kadar yüksek olursa, anahtar kelimenin o kadar önemli (ağırlık) olması gerekir) * PK = ItemID + KeyWord

Yaptığım ilk şey, alakalı olan herhangi bir yerden bireysel kelimeler toplamak. Müvekkilim için ürünleri tabloya kelimeler çekeceğim. Özellikle Itemid, ItemName, ItemShortDescription, ItemLongDescription, Üretici, ÜreticiSKU, Category1, Category2, Category3 vb alanlarından. Web sayfalarını dizine ekliyorsanız, sayfa metninden, sayfa başlığından, URL'den veya dizine eklenen sayfaya geri bağlantı veren diğer sayfalardaki bağlantılardan veri alabilirsiniz.

Ağırlık değeri, anahtar kelimenin nereden geldiğine göre belirlenir. Örneğin benim durumumda Öğe Üretimi'nin SKU'su 100 ağırlık alırken, Öğe adından bir kelime 25 ağırlık alabilir. ItemLongDescription öğesinden bir kelime 5 ağırlık alabilir. Web sayfalarını dizine ekliyorsanız kelimeler sayfa başlığından 75 ağırlık alabilirken, sayfa metninden kalın harflerle yazılmış bir kelime 10 kilo alabilir. Bir kelime birden fazla veya \ ve birden fazla yerde tekrarlanırsa, her seferinde ağırlığı toplarsınız gerçekleştiği. Örneğin "Gömlek" kelimesi ItemId = 12345 için iki yerden geliyorsa, ItemName (ağırlık 25) ve ItemLongDescription öğesinde (5 x2 = 10 ağırlık) iki kez görünüyorsa "gömlek" kelimesinin ItemId için toplam ağırlığı 35 olur. = 12345.

Bazıları "pembe gömlek" için arama yaparsa "Pembe" veya "Gömlek" kelimelerinin tüm örneklerini arayabilirim ve toplam ağırlıkları toplam. Toplam ağırlığı en fazla olan ürünler üstte gösteriliyor.

SQL:

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

İşte burada, temel (ve hızlı) bir arama motoru var. Tabii ki noktalama işaretleri, HTML Kodu ve "ve", "if", "veya" gibi değersiz anahtar kelimeler gibi daha yapılacak çok şey vardır. Bu, Anahtar kelime öbeklerini aramayı ele almaz, ancak nerede başlayacaklarını ve biteceklerini anlayabiliyorsanız, öbekler için benzer bir sistem kullanabilirsiniz.


teşekkürler güzel cevap. ürünleri gruplandırmak için ne önerirsiniz. yani farklı web sitelerinden 1 milyon taranmış ürün sayfanız var. aynı ürünleri farklı web sitelerinde gruplandırmak istiyorsunuz: programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@Monster - Ürün Üreticisi \ SKU Kombinasyonu hakkında ne dersiniz?
Morons

Ayrıca gibi şirketlerden bu verileri (kira) satın alabilirsiniz Etilize
Moronlar

biraz daha açıklayabilir misin çünkü ben anlamadım. Teşekkür ederim.
MonsterMMORPG

3
"Tamam" pratik bir cevap. Ancak bu, “Bilgi Edinme” olarak bilinen tüm çalışma alanını göz ardı etmektedir. "Doğru yöne işaret etme" açısından, IR kafamda daha iyi olurdu.
Darknight

4

Özgürce dağıtılmış Bilgi Edinme Giriş taslağı, ana referans materyaliniz olacaktır. Temelden ileri düzeye kadar arama (bilgi alma) işler.


3

Arama motorları web tarayıcıları üzerine inşa edilmiştir , sonuçlarını görüntülemek için bir web sitesi geliştirmeden önce bu enayilerden birini nasıl oluşturacağınızı anlamanız gerekir (bununla birlikte gitmek için hızlı, verimli bir veritabanına ihtiyacınız olacak).


3
Bir arama motoru bir web tarayıcısının çıktısını tüketebilir, ancak aksi takdirde birbirleriyle çok az ilgileri vardır. Dahası, SQL çeşitliliğinin hızlı ve verimli bir veritabanının bu çabada çok yardımcı olması muhtemel değildir. Arama motorları genellikle SQL kalıbına hiç uymayan tersine çevrilmiş dosya indeksleme şemaları kullanılarak oluşturulur.
Marcelo Cantos

@Marcelo Cantos: Ters dosya indeksleme karmaşık geliyor: -0 - Cevabımı netleştirmeye yardımcı olduğunuz için teşekkürler!
palbakulich

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.