Autor Zpráva
Kordy
Profil *
Dobrý večer,
neni to pro mě sice nijak životně důležitá informace, ale kdyby to někdo věděl, byl bych rád. :)
Zajímá mě jak vlastně můžou vyhledávače vypsat třeba ten kus textu co vyhledávám nebo třeba ten titulek (předpokládám, že ten kód je stejný nebo podobný) Jak ho vůbec v textu najde, jak ho odsut dostane? Jak ho vypíše to bych snad nějak zvládl :)
Alphard
Profil
Během indexace webů si vyhledávací servery ukládají pro ně zajímavá data do svých databází a pak je dle potřeby vypisují. Princip vyhledávání nelze popsat třemi větami, ale jestli vás to zajímá, nedávno Yuhů popisoval na youtube některé postupy vyhledávačů, konkrétně Seznamu.
Kordy
Profil *
Četl jsem o tom něco na jak psát web a myslím, že bych o sobě mohl říct, že chápu princip, ale se svými znalostmi php si nedovedu představit jak by mohl vypadat ten kód. Asi je to trošku tajemství, ale jestli by ste třeba nevěděl aspoň některé ty funkce které to umožňují.
Alphard
Profil
Tak vyhledávače nejsou napsané v PHP. Neexistuje žádná funkce search(), používají se hlavně funkce pro načítání stránek, práci s textem, komunikace s databází a různé výpočty. Jestli chápete princip, nemůžete se ptát na konkrétní funkce :-)
Kordy
Profil *
Pak ho asi nechápu :) Můžu se tedy ještě zeptat na drobnost? Co že to mám naštudovat, abyh to uměl? :)
Alphard
Profil
Zmíněná videa jsou na http://www.youtube.com/user/DusanJanovsky Pro podrobnosti hledejte search engine.
Jestli si chcete něco triviální zkusit vytvořit, můžete pomocí file_get_contents() načíst stránku s odkazy vedoucími na všechny strany, např. (třeba nějakou statistiku top stránek). Uložit její obsah a vytahat z ní další odkazy preg_match_all(). A další stránky zase od začátku.
Stránky ukládat třeba do MySQL a pak použít fulltext index pro vyhledávání.
Brzy ale zjistíte, že se začne hodně rychle plnit databáze, vyhledávání bude trvat dlouho a budete mít jen zlomek webu :-)
GeneralDv
Profil
Nevíte, jestli bude Yuhů dál pokračovat v tom seriálu? Celkem mě tohle téma zajímá.

Mimochodem. Asi tejden ze zábavy píšu svýho indexovacího bota v C#, zrovna teďko řešim převod kódování. Jinak už to parsuje i title a tahá další informace, takže to můžu začít ukládat, ale nevim jak - respektive kam.
Nechci žádnou relační DB, zatim mě napadá akorát binární soubor, kterej bude problémovej, ale nebudu muset nic parsovat narozdíl od textovejch.

Edit:
Ochutnávka: www.2i.cz/e5341c36e5
Kordy
Profil *
File_get_contents() to bylo myslím to co sem myslel. Zvláštní, že mě to vůbec nenapadlo, když jsem tu funkci znal...Nemá to být 100% vyhledávač jako je třeba google takže možná si i vystačím :) Nicméně to nemění fakt, že odpověď byla docela vyhýbavá a stále nevím co mám študovat kdyby to bylo skutečně pomalý :D
GeneralDv
Profil
Kordy:
Udělej si globální pole, do kterýho se budou ukládat URL adresy. Klíč - bude URL, hodnota bude true/false - false jako nestaženo (čeká na stažení), true jako staženo.

Pak funkci, kde bude jako parametr URL adresa, tu zavoláš a.. stáhneš zdroják z tý URL pomocí file_get_contents(), zdroják projedeš pomocí preg_match_all() (vyhledává řetězce odpovídající reguláru) - vyhledáš odkazy na jiný stránky. Všechny odkazy si uložíš do toho globálního pole s hodnotou false.
(teď si můžeš ten zdroják třeba uložit nebo něco jinýho..)

Projdeš globální pole pomocí foreach a vybereš nějakej link co má hodnotu false, pro ten konkrétní link dáš hodnotu na true - jako že už si jí vybral a abys ji nestahoval dokola.
Z tou URL cos vybral zavoláš tuhle funkci znovu.

Edit: Jo a když už v seznamu žádná URL s hodnotou false nebude, tak to ukonči pomocí return.

... asi takhle zjednodušeně. Proleze to 1 web, uloží a stáhne odkazy na další. Každej z nich proleze a zase stáhne a takhle dokola.
Kordy
Profil *
Kordy:
odpověď byla docela vyhýbavá a stále nevím co mám študovat kdyby to bylo skutečně pomalý
GeneralDv
Profil
Co přesně chceš vědět?

Já ti popsal algoritmus indexování, můžeš to zkusit podle toho udělat. Pak je tu samotný vyhledávání. Když zadáš dotaz, tak to prohledá celou databázi těch zaindexovanejch stránek a analyzuje slova a další kritéria (těch je třeba 100), podle toho ti seřadí výsledky.
Kordy
Profil *
To chápu, ale Alphard mluvil o tom, že v phpčku by to bylo pomalý a že se to píše v něčem jiným a ta vyhýbavá odpověď tím sem myslel právě to, že rozvíjel myšlenku o php, ale přitom mi předtím řekl, že to nebude za moc stát :)
meris
Profil
Kordy:
Co je cílem?
Naučit se jakým způsobem pracuje vyhledávač? Pak je to na jazyku nezávislé.
Pokud chceš prohledávat řádově stovky webů,tak ti php s MySQL docela stačí.
Pokud jich chceš spíše tisíce a víc, tak nezbyde než C/C++, případně jiný rychlý jazyk, časem budeš muset řešit škálování výkonu a databází (všechny data se na jeden server nevlezou,příliš mnoho požadavků na to aby stíhal odpovídat jeden server).
Alphard
Profil
Kordy:
Já jsem psal, že velké vyhledávače nejsou napsané v php, není na to stavěné. Crawler pracuje prakticky bez přestávky, což je je pro php netypické, php není příliš výkonné a určitě by se našly další objektivní důvody. Pomalé to bude hlavně při vypisování výsledků, kdybyste zaplnit např. jeden 1 TB disk, a snažil se v něm hledat fulltextem, tak si na výsledky docela počkáte...

PHP jsme zmínil, protože vy ho zřejmě znáte. Na zkoušku není důvod se mu bránit. Když vytvoříte rozumně malou (nevím, tak do 10k až 1M záznamů) zkušební databázi, mohlo by vám vyhovat.
Kordy
Profil *
Myslím, že by to stačilo. Snad si vystačím s phpčkem nemělo by to být hodně složitý... Každopádně kdyby to nestačilo zaznělo tady i něco dalšího co bych musel dostudovat o to mi šlo. Děkuji všechno co jsem potřeboval na začátek té práce už vím teď už jen do toho... :)

Díky za rady můžete lock.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0