Gdybym chciał zbudować wyszukiwarkę, jak mam zacząć? [Zamknięte]


9

Czy ktoś może skierować mnie w dobrym kierunku? Naprawdę nie mam doświadczenia w pisaniu kodu, ale jestem szybkim uczniem. Nie próbuję powiedzieć, że będzie łatwo, ale mam nadzieję, że ktoś może mi pomóc ...


6
Jeśli nie masz doświadczenia w pisaniu kodu, co powiesz na naukę programowania? Zbudowanie wyszukiwarki to dla kogoś nowego w programowaniu przesada.
Terence Ponce,

3
Jak mówi Terence, nie jest to coś nowego dla programistów. Każda wyszukiwarka, która jest w ogóle dobra, wydaje się być dość skomplikowaną pracą, jest powód, dla którego Google jest tak ogromny, że wykonują bardzo trudne zadanie dość dobrze. Nawet doświadczeni programiści wolą używać czegoś wcześniej zbudowanego. Jeśli podasz jakiś pomysł, do czego chcesz, może uda nam się wskazać właściwy kierunek.
Orbling

2
Zacznij od mniejszego projektu. Budowa wyszukiwarki wymaga ogromnej ilości kodu. Jak zbierasz wszystkie dane dla swojej wyszukiwarki? Potrzebujesz dużo więcej kodu i ogromnej infrastruktury. Naprawdę, zacznijcie od mniejszych projektów i pracujcie, bo inaczej będziecie sfrustrowani.
James

1
Ta książka pomogła mi zrozumieć, czym są wyszukiwarki i jak są one zbudowane: nlp.stanford.edu/IR-book
devnull

Odpowiedzi:


16

Napisałem to na blogu, który kiedyś miałem, kiedy .... nie ma go już w sieci, więc ... oto jest! :

Jak napisać wyszukiwarkę

Darren Rowse z probolgger.net prowadzi projekt pisania grupowego na dowolny temat. Jest to jeden z niewielu blogów, które regularnie czytam, więc doszedłem do wniosku, że nie napiszę czegoś, co warto przeczytać dla odmiany, a raczej mojej standardowej brutalnej wypowiedzi, w której grożę ci dźgnięciem Hugo Chavesa w gardło.

Postanowiłem napisać „Jak napisać wyszukiwarkę”. Wybrałem ten temat z dwóch powodów:

  1. W sieci nie ma zbyt wielu dobrych informacji.
  2. Obecnie piszę jeden dla jednego z moich klientów.

Mój klient jest sprzedawcą internetowym o znacznych rozmiarach, więc nie przeszukuję całej witryny tylko jej witryny, a konkretnie produktów na sprzedaż w jej witrynie. Niemniej jednak te same techniki mogą być użyte do napisania bardziej skomplikowanej techniki wyszukiwania w Internecie. Wiem, że to nie jest blog techniczny, więc nie będę zagłębiał się w szczegóły techniczne, nie będę też omawiał wymagań dotyczących zasilania / mocy obliczeniowej ani indeksowania sieci.

Używam dość prostej techniki, mam tabelę (tblKe words) z trzema polami:

  1. Itemid (jeśli przeprowadzasz wyszukiwanie w sieci, będzie to URL)
  2. KeyWord (indeksowane słowo kluczowe)
  3. Waga (jest to wartość liczbowa od 1 do 100, im wyższa liczba, tym bardziej znaczący (waga) niesie słowo kluczowe) * PK = ItemID + KeyWord

Pierwszą rzeczą, którą robię, jest zbieranie pojedynczych słów z dowolnego miejsca, które jest istotne. Dla mojego klienta wyciągnę słowa z tabeli produktów. W szczególności z pól Itemid, ItemName, ItemShortDescription, ItemLongDescription, Producent, ProducentSKU, Kategoria1, Kategoria2, Kategoria3 ect. Jeśli indeksujesz strony internetowe, możesz pobrać dane z tekstu strony, tytułu strony, adresu URL lub linków na innych stronach, które prowadzą z powrotem do indeksowanej strony.

Wartość masy zależy od tego, skąd pochodzi słowo kluczowe. Na przykład w moim przypadku jednostka SKU produkcji przedmiotu uzyska wagę 100, podczas gdy słowo z nazwy przedmiotu może uzyskać wagę 25. Słowo z opisu przedmiotu może mieć wagę 5. Jeśli indeksujesz strony internetowe, słowa te z tytułu strony może uzyskać wagę 75, a pogrubione słowo z tekstu strony może mieć wagę 10. Jeśli słowo zostanie powtórzone więcej niż raz lub \ i w więcej niż jednym miejscu, należy dodać wagę za każdym razem Pojawia się. Na przykład Jeśli słowo „Koszula” pochodzi z dwóch miejsc dla ItemId = 12345, Nazwa przedmiotu (waga 25) i pojawia się dwukrotnie w ItemLongDescription (waga 5 x 2 = 10), słowo „koszula” miałoby całkowitą wagę 35 dla ItemId = 12345.

Jeśli ktoś szuka „różowej koszuli”, przeszukuję tabelę pod kątem wszystkich wystąpień słów „Różowa” lub „Koszula” i Łącznie wagi. Wyświetlanie przedmiotów o najwyższej całkowitej masie na górze.

SQL:

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

Masz więc podstawową (i szybką) wyszukiwarkę. Oczywiście jest jeszcze wiele do zrobienia, takich jak usunięcie interpunkcji, kod HTML i bezwartościowe słowa kluczowe, takie jak „i”, „if”, „or”. Nie dotyczy to wyszukiwania fraz kluczowych, ale możesz użyć podobnego systemu dla fraz, jeśli możesz dowiedzieć się, gdzie zaczynają się i kończą.


dzięki ładna odpowiedź. co byś sugerował także dla grupowania produktów. mam na myśli, że masz ponad milion zaindeksowanych stron produktów z różnych witryn. chcesz pogrupować te same produkty w różnych witrynach: programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@ Monster - co z kombinacją producenta przedmiotu \ SKU?
Morons

Możesz również kupić (wypożyczyć) te dane od firm takich jak Etilize
Morons

możesz wyjaśnić to trochę bardziej, ponieważ go nie dostałem. Dziękuję Ci.
MonsterMMORPG

3
Praktyczna odpowiedź „ok”. Ignoruje to jednak cały kierunek studiów, zwany także „odzyskiwaniem informacji”. Jeśli chodzi o „wskazywanie we właściwym kierunku”, IR byłoby moim zdaniem lepsze.
Darknight


3

Wyszukiwarki są zbudowane na robotach indeksujących , musisz dowiedzieć się, jak zbudować jednego z tych frajerów, zanim będziesz mógł stworzyć stronę internetową do wyświetlania jej wyników (potrzebujesz szybkiej, wydajnej bazy danych, aby z nią skorzystać).


3
Wyszukiwarka może zużywać dane z robota sieciowego, ale poza tym mają niewiele wspólnego ze sobą. Co więcej, szybka i wydajna baza danych odmiany SQL raczej nie pomoże w tym przedsięwzięciu. Wyszukiwarki są zwykle budowane przy użyciu odwróconych schematów indeksowania plików, które w ogóle nie pasują do formy SQL.
Marcelo Cantos

@Marcelo Cantos: Indeksowanie plików w odwróconym brzmieniu jest skomplikowane: -0 - Dziękujemy za pomoc w wyjaśnieniu mojej odpowiedzi!
palbakulich

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.