Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwarka stron...
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
z3
Może nie jest to zadanie dla php - ale czemu nie;)

Jak napisali byscie wyszukiwarke na ok 20mln stron??
DeyV
Zanim zaczniemy nad tym myśleć, może powiedz coś więcej?
Co chcesz osiągnąć? Skąd ta pewność, żę będzie 20 mln.?
Jak ma działać?
Bo niestety - ale w tej chwili trudno powiedzieć cokolwiek na ten temat.
z3
20 mln - liczba abstrakcyjna - aby wyraźić ze chodzi o duzy projekt z naprawde wydajna baza danych.

Co do samego projektu podzielił bym go na 3 części -
napisanie robota chodzacego po stronach i zapisującego dane - chyba najprosztszy etap

2 - stwozenie wydajnego systemu przeszukiwania bazy danych

3 - określenie reguł na miejsce strony pod szukaną frazą
MaKARON
Kiedyś nad tym myślałem, ale projekt jest tak zaj...[cenzura] zawikłany że dałem sobie spokój (na etapie projektu), zabrałem się za to za projekt mniejszej bazy, ale o podobnych założeniach WTF (What The Faq) - baza faq'ów z wyszukiwarką. Mimo prostego pomysłu, projekt był bardzo skomplikowany - właśnie trzeci punkt był bardzo ważny w moim projekcie... który również padł, ale powstało część kodu. Może kiedyś znów spróbuję... smile.gif jeżeli znalazłaby się ekipa smile.gif (php+ADOdb+Smarty) - pisałem w tej sprawie do właściciela faq.pl, ale nawet nie odpowiedział.

KaMeLeOn: Panie MaKARON... Na forum php.pl uważamy na słownictwo.
raf2001
Można by było także oprzeć swoją wyszukiwarke na zasadzie "złodziejskiej". A chodzi mi o to:
Skrypt wysyła zapytanie (odpowiednie swormułowanie oczywiście) do jednej ze stron (google - światowe szukanie, netsprint - polskie). póznij pobrać strone wynikową sformatować aby pasowała do strony (w tym usuwanie linków sponsorowanych, czy coś takiego). koncepcja prosta, chyba gorzej z wykonaniem
Seth
To co propunejesz raf2001 jest wbbrew pozorom latwe do napisania.
Wystarczy skorzystac z API goole i uzyc do niego jakiejs gotwej klasy do jej obslugi i wydawac zapytania w postaci <zapytanie> site:<adres strony>.
Nitryt14
Piszecie o robotach buszujących w necie.
Ale w czym byście napisali takiego robota rolleyes.gif
Według mnie nie jest to wcale takie proste jak się to wydaje.
dag
NItry14: W czym? Chociażby w php. A jak nie php to Java, C++........

Oczywiście wszystko musi wydajnie chodzić przy tak dużej ilości.

Jednak nie jest łatwe napisanie takiego robota.
raf2001
mój sposób niebyl by bardzo wydajny, ale jakoś by to szło. Moim zdaniem zrobienie takiego systemu, to dla znających sie dobrze na php to okolo 2 dni roboty (jestem teoretykiem, wiec tego raczej niezrobie). Skrypt był by oparty na takiej architekturze:
1. Ktoś w inpucie wpisuje czego szuka
2. skrypt odwołuje się do jednej z wyszukiwarek (lista wyników zrobiona tak w zapytaniu, aby na jednej stronie bylo jak najwięcej odpowiedzi)
3. skrypt "podkrada dane" ze strony i formatuje z nich własne, wyświetlając je (z podziłame na strony):
podkradanie tych danych mogło być przeprowadzone na dwa sposoby:
a. w realu - czyli przykładowo odwołujemy sie do wyszukiwarki, aby pobrać dane (w tym przypadku np 25 rekordów) i poprostu je wyświetlić na stronie skryptu
b. w pamięci (tak to nazwalem) - skrypt odwołuje się do wyszukiwarki, pobiera maxymalną ilośc rekordów (rekordy, to ilośc wyświetlen wyników na jednej stronie np 150.), oborka ich podzielenie ich na nowe strony np po 20 rekordów i wyswietlenie
Taka jest moja teoria a kto co jak zrobi to jego sprawa 8)

ps. skrypty mogły by być 2: php lub perl. Moim zdaniem perl łatwiej by to załatwił (ale go nieznam więc to tylko moje domysły)
Seth
Tutaj http://www.google.pl/intl/pl/apis/ sa informacje jak pobierac wyniki z googli uzywajac ich API. Przyklady sa dla Javy i .NET'a ale nic nie stoi na przeszkodzie aby napsiac to w php.
raf2001
to moze niech ktoś zrobi taki skrypcik, w najprostszej formie (osobiście nielubie class, więc wolałbym bez tego). skrypcik: thief laugh.gif rolleyes.gif
bumelang
Generalnie pisanie robotów jest sprawą dużo trudniejszą niż się wydaje i php się do tego nie nadaje z 2 powodów:

1) przechowywanie indeksów - zwykła baza danych takiego zadania się nie ima - jeśli taka metoda przechowywania danych zostanie zastosowana, to nie będzie to tak wydajne, ani skalowalne jak rozwiązanie autorskie; z reguły buduje się specjalne indeksy słów na jakiś drzewach binarnych itp. - jak nie trudno zgadnąć w php napisanie czegoś takiego jest - jeśli nawet możliwe - mało sensowne
2) język polski - zagadnienie normalizacji (czyli sprowadzanie słów do form pierwotnych - bezokolicznika dla czasowników czy mianownika l.p. dla rzeczowników); realizują to specjalne algorytmy działające z reguły na indeksach wszystkich słów języka polskiego we wszystkich formach i próbujące wyznaczyć odopowiednie znaczenie z kontekstu gramatycznego; przykładem takiego podejścia do tego zadania jest NetSprint; w każdym razie ta złożoność obliczeniowa też nie jest dla php

W reszcie - jak ktoś już wcześniej zauważył wyszukiwarka najpierw buduje indeks (co w przypadku 2 mln. stron może potrwać bardzo długo) a dopiero potem z niego korzysta.

Jeśli kogoś interesuje dobra wyszukiwarka OpenSource w ogóle, to jest nią bez wątpienia Lucene (http://jakarta.apache.org/lucene/docs/index.html), ale jest napisana w Javie i niestety nie obsługuje normalizacji dla języka polskiego - z resztą generalnie polskie algorytmy normalizacji nie są dostępne w bezpłatnych implementacjach.

Nie polecam w każdym razie pisania wyszukiwarki bez odpowiedniej wiedzy, a już na pewno nie w php smile.gif
raf2001
nasze założenia się różnią, ty mówisz o tworzeniu od podstaw wyszukiwarki, ja tylko o "złodziejstwie" ( biggrin.gif ). moja zasada jest moim zdaniem prosta w zrozumieniu (chodz może trudna w zrobieniu, no ale...). Pozatym czy ktoś mialby czas na zabawe w robienie polskiego googl'a.

Ps. google.pl opiera się na kilku wyszukiwarkach polskich,więc pół roboty by było z glowy :wink:
Seth
Cytat
Ps. google.pl opiera się na kilku wyszukiwarkach polskich,więc pół roboty by było z glowy  :wink:

:?:
raf2001
Gdzies czytałem, że google nieposiada własnej bazy, opiera sie na onecie, wp i innych tego typu polskich wyszukiwarkach. niewiem co on dokładnie robi, ale opiera się (czy indeksuje onet,wp i inne i potem z tego kożysta, niewiem dokładnie, ale takie cos było)
ps. przynajmniej tak mi się zdaje rolleyes.gif
spenalzo
Chyba odwrotnie... Onet korzysta z googli przy szukaniu po zagranicznych stronach.
Nalfein][WR
Bzdura. Google ma własną bazę danych, rozproszoną na wiele komputerów. Korzysta z całkiem innych algorytmów, indeksuje strony inaczej (np. napisz w google "masło maślane" i "maślane masło" - otrzymasz inne zestawy wyników, gdyż Google uwzględnia odległość dopasowanych wyrazów) i nie ma porównania z takim sobie Onetem. Z kolei WP ogłasza upadłość - jak WP padnie to Google polskie też? Bzdura do kwadratu.
raf2001
nieważne, ale napewno jakoś z siebie kożystają (mniejsza już o to który z którego, jak znajde opis to zacytuje). Teraz może ktoś ma inny pomysł na wyszukiwarke niż moje?
Nalfein][WR
Ja pisałem w odpowiedzi na Twój post - pisaliśmy je ze spenalzo w tym samym czasie prawie smile.gif Mozliwe, że Onet korzysta z Google, ale na odwrót nie bardzo "z przyczyn technicznych".

Ja bym zrobił wyszukiwarkę w oparciu o Google - są bardzo szybkie, mają wygodny dostęp przez WebServices - nie trzeba parsować wyników z HTML-a. Czegóż chcieć więcej winksmiley.jpg
raf2001
skryptu laugh.gif
cichy
napisanie skryptu to akurat sprawa banalna...
Kiedyś sobie coś takiego napisałem, ale było to dawno temu gdy jeszcze moja znajomość php była niska.
Zrobiłem to tak że pobierałem strone google z wynikami i obrabiałem u siebie poprzez wyrażenia regularne.

Pozdro
raf2001
SETH mówił i myśle ze to było by lepsze rozwiązanie zrobić tego zlodziejaszka na googleapi. nietrzeba by było się zbytnio męczyć, a i wyniki by były szybciej pobierane (tak myślę)
Nalfein][WR
No to raf2001 - uczyć się WebService i zabierać się do roboty! Są gotowe klienty SOAP, dokument WSDL też Google chyba udostepniają, a więc sprawa będzie sprowadzała się do napisania:

[php:1:bfedcab052]
<?php
$client = new WebServiceClient('http://www.google.com/.../api.wsdl');
$result = $client->search('sex drugs alcohol');
print_r($result);
?>
[/php:1:bfedcab052]

Toż to takie trudne? Pokombinuj. Znajdź klienta (w PEAR chyba nawet był) i poczytaj example o nim i o użyciu Google API winksmiley.jpg To już chyba nawet nie jest temat na PRO ;P
raf2001
temat jest na pro, bo moje rozwiązanie to jedna propozycja, a jeszcze były inne. :wink:
ps. ja bopiero zaczynam z php (bardziej teoretycznie umiem więcej). Pozatym co to SOAP, musze jeszcze wiele się nauczyć bo w poruwnaniu do innych to.... lepiej niemówic
splatch
Czytalem o zaawansowanej wyszukiwarce, ale zrobionej w Javie. Potrzebny jest do tego pakiet JDK, albo J2SDK nie pamietam dokladnie, ale wyszukiwarka po prostu fajna, jesli jestes ciekaw to zamow archiwalny numer php Soluations z rozowa okladka - www.phpsolmag.org
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.