Keresőmotor fejlesztése saját kezüleg PHP-ben
Sziasztok!
Arra lennék kíváncsi, hogy PHP-val lehet készíteni keresőt? Ha nem akkor milyen programnyelv kell egy keresőmotor írásához?
Előre is köszönöm a segítséget!
Dzsijszi
■ Arra lennék kíváncsi, hogy PHP-val lehet készíteni keresőt? Ha nem akkor milyen programnyelv kell egy keresőmotor írásához?
Előre is köszönöm a segítséget!
Dzsijszi
kezdd az alapoknál
Milyen feledattal?
Php
Ezen felül a kérdés nem volt pontos. Google konkurenst szeretnél, vagy egy oldalon való keresést, netán egy termékkeresőt?
...
Gratula
akkor egyszerűsítsünk
Index
OMG!
:D
Ez jó!
OMG
Ezt még nem láttam soha...nagyon jó! :)
</off>
Értem, utána mi a 2. lépés?
Első nekifutásra ajánlom a Sphinx
Ami a robotot illeti: robotot úgy kell írni, mint bármi más programot :) Ha már tudod mi a cél, megtervezed, implementálod.
Szerintem itt az a hiba, hogy még nem tudod, mit akarsz. Ne akarj túl nagyot: először próbálj meg valami kisebbet. Pl. egy fórum keresőt, ami majd a hozzászólás bejegyzéseit nézi sql-ből. Már egy egész site keresője is igen komoly kihívás tud lenni, tapasztaltabbaknak is, nemhogy egy keresőoldal. Csak lépésről lépésre ;)
Megj: csak hogy ne mondd, hogy semmi hasznosat nem írtam: a robot ami neked kell annyit csinál, hogy lekér egy oldalt, a szövegből kiszedi a sallangot (html, stb.), eltárolja, keresésre előfeldolgozza a maradék szöveget), regexpel kikeresi az url-eket, és azokra is meghívja az egész processzt. Ez mind megoldható php-ben, bár akadhatnak problémáid (milyen mélységig indexelsz, stb.)
b.
Köszönöm
Javaslat
Valószínűnek tartom, hogy ilyesmit C/C++ nyelven szoktak írni. A crawler meg akármi nyelven írható (Perl pl. hatékony lehet), néha még JavaScriptben is :)
Csak nem?
De bizony
Érdekes lenne megnézni, mondjuk egy Scala/JRuby/Jython/Rhino/Clojure összevetést - valószínűleg a Ruby és a Python hamar elvérezne :) Olyanról mindenesetre hallottam már, hogy a számításigényes részt áttették Javaból Scala/Clojure implementációra.
???
Kérdezőnek: ebben a kategóriában érdekes lehet még a Lucene (PHP esetén akár plusz Solr), Xapian, de ami számodra érdekesebb lehet, az a Mnogosearch, ezzel tudsz meglévő site-ot végigindexeltetni.
pongyola
Elmélet
Az első és legfontosabb egység az adatok (url-ek) feldolgozása, a másik a keresések kiszolgálása.
Az adatfeldolgozásnál (url-ek) figyelned kell:
- a meglévő (már indexelt) tartalom változására
- az új tartalmak indexelésére
- már nemlétező tartalmak karbantartására
Ha már foglalkoztál vagy tanultál programozást, próbálj létrehozni elméleti egységeket és abból építs egy elméleti alkalmazást:
1. Tételezzük fel, hogy az url-eken található összes tartalmat szöveges változóknak tekintjük (azok tényleges beolvasása technikai részletkérdés, biztos, hogy találsz a php manual-ban példákat). Ha ezt elfogaodo, akkor
2. ezeket a szöveges változókat url-hez azonosíthatóan el kell menteni adatbázisba, majd
3. az elmentett tartalomra építeni kell egy szótár adatbázis. Fel kell építened egy olyan "tartalom<=>kapcsoló<=>szótár" struktúrát, amiből majd ki tudod szolgálni a kereséseket. Kicsit részletesebben, a kapcsoló táblába gyűjtögeted a tartalom<=>szó összefüggéseket, így egy szó keresése a szótárban megadja majd az összes url-t, ahol az a szó megtalálható (ez nagyon felületes, csak elméleti).
Ezek után már csak a naprakészen tartás a fontos, illetve az adott url-ekhez (persze ha domain-eket indexelsz, nem csak egy-egy adott oldalt) megjelenő új tartalmak indexelése, régiek kiürítése.
Így hát a programod azon része, amelyik meghatározott időközönként (cron-olva) begyűjti a megadott url-ek tartalmát, az lesz a robotod.
A keresés kiszolgálása sem sokkal egyszerűbb (talán programozástechnikailag igen), a keresési gyakoriság függvényében sokat bonyolódhat, amúgy meg egy átlagos bonyolultságú lekérdezés:
1. Kikeresed a szótárból a szót, amit keresnek,
2. Lekéred a kapcsoló táblából az összes tartalom azonosítót, amiben szerepel a keresőszó,
3. csinálsz az url-ekből egy találati listát.
Ha tovább bonyolítanánk:
- A keresőszavak nem minden esetben ragozatlan tőszavak, ezért a hasonlóságra is kell figyelmet szentelni (körte=>körte%)
- Keresőszó szinonimák, keresőszó egyéb összetett szavakban (körte=>körtefa | fa)
- Ha keresés után megszámolod, hogy a kapcsoló tábládban megtalált egyezések számszerűen hogyan oszlanak meg a találati lista tekintetében, mindjárt tudsz csinálni egy találati "értékességi" sorrendet (persze célszerű vizsgálni a teljes tartalomban előforduló szavak arányát is)
Hát nagyjából ennyi, és azt hiszen még lenne sok jó ötletem, de ezen már el lehet indulni!
Köszi
HTTP
Már megírták
Persze
CURL
bonyolultabb
egyébként szerintem a web bejárása itt a legkisebb probléma. a megfelelő reprezentációt, amiben aza datokat tárolod, nehezebb megválasztani, valószínűleg nem egy egyszerű táblaszerkezet lesz.
ezen kívül ha valami komolyabb keresőt akarsz, akkor érdemes figyelembe venned (mint a google) a bejövő és a kimenő linkek számát és ez alapján döntenes. ha még jobbat akarsz, akkor peddig figyelheted a kattintások számát. abból tudod, hogy a felhasználónak mi tetszett a találatok közül. ha ezt valamilyen tanuló algoritmussal (pl neurális hálós dolgok) be tudod építeni a későbbi eredményekbe, azzal nem csak optimalizálni tudsz, hanem jobb is lesz a szolgáltatásod.
mivel még nem említette senki
hogy írjak valami példát is, ez a cikk elég jó lehet kiindulásnak: http://deadlime.hu/2006/10/20/mysql-fulltext-kereses/
ez így elég egyszerű szerintem, emellé már csak a crawler kell de az se valami hűdenagy dolog, max 200 sorból kijön az is phpban.
ez a megoldás lehet hogy nem lesz olyan gyors mint egy C ben írt kereső, viszont legalább hamar megvan és nem kell semmit se túlbonyolítani rajta.
Köszönöm és még 1 kérdés
Mennyi adat
Hogy mekkora tárhelyre és MySQL-re lesz szükséges? Az attól függ milyen módszert választasz az indexelésre, keresésre, és mennyi adatot szeretnél kereshetővé tenni. De ha kb. a kereshető adat 4-8 szoros mennyiséggel számolsz, mint tárolandó mennyiség, akkor nagyot nem tévedhetsz.
"Tárhely"
Egyes szolgáltatók ajánlanak virtuális szerver megoldásokat, ahol kapsz egy IP címet és mögötte egy látszólagos saját szervert, amire te teleptheted az oprendszertől kezdve minden rétegét az alkalmazásodnak. Érdemes lenne kipróbálni az Amazon ECC szolgáltatását, ahol dinamikusan hozhatsz létre maganak több virtuális szervert is, ahogy a tesztelés, vagy a forgalom növekedése megkívánja.
Ha meg csak játékból csinálod, állítsd be a sarokba egy régi gépedet linuxszal vagy freebsdvel, ahol mindent kipróbálhatsz garantáltan kevesebb hajtépéssel, mint ha egy rendszergazdával kéne veszekedned, hogy kapcsolja már be az Apache XY beálltását...
ezt, hogy érted?
Mit érek vele, ha beállítok egy gépet a sarokba? Mármint azon, hogy állítsak be dolgokat? Ezt nem értem.
Környezet
Másrészt pedig neked "szerver" kell, nem "tárhely".
azt, hogy kell?
Tanulj
Ebben a szálban már minden elhangzott, amire szükséged lesz, de bővebben senki nem fogja magyarázgatni, magadnak kell utánajárni. A Google a barátod lesz.
Kezdésképp két hasznos iromány:
Nyugi én értem
Az viszont tény hogy két gépemet is a sarokba állítottam linuxal, és próbálkoztam, mert máshogy nem megy.