Aktualnie jestem w trakcie realizacji wyszukiwarki na glownej stronie, ktora bedzie przeszukiwala artykuly, dzial download oraz FAQ. Ta, ktora jest dotychczas nie dziala dobrze, z tego wzgledu, ze spider przeszukujacy serwis analizuje kazda strone pod katem kodu HTML, trwa to baaardzo dlugo i nie nigdy nie zdarzylo sie zeby cos nie przerwalo procesu analizy (jakis time out lub przerwanie polaczenia). Dlatego chce sie z wami podzielic aktualnymi pracami nad wyszukiwarka, moze bedziecie mieli jakies zastrzezenia.
Otoz na tym etapie sa trzy tabele:
- coyote_keyword - lista slow znalezionych w artykulach (powyzej 1 znaku)
- coyote_engine - numery wyrazow z tabeli coyote_keyword oraz numery stron z tabeli coyote_side na ktorych znaleziono dane slowo
- coyote_side - URL strony, tytul strony
Poniewaz spider nie bedzie "chodzil" po kolejnych stronach i analizowal tresc HTML, zbudowanie listy slow bedzie sie opieralo na informacjach z bazy danych (np. kolumna article_content). Oto struktura tabel:
Struktura tabeli dla coyote_engine
CREATE TABLE coyote_engine (
engine_key mediumint(9) NOT NULL default '0', # numer slowa
engine_spider mediumint(8) NOT NULL default '0', # numer strony
engine_title_match tinyint(1) NOT NULL default '0', # czy slowo znajduje sie w tytule strony oraz w tresci
engine_weight smallint(6) NOT NULL default '0', # ilosc danych slow na jedna strone
KEY engine_key (engine_key)
) TYPE=MyISAM;
--------------------------------------------------------
Struktura tabeli dla coyote_keyword
CREATE TABLE coyote_keyword (
keyword_id mediumint(9) NOT NULL auto_increment, # unikalne ID slowa
keyword_keyword varchar(64) NOT NULL default '', # slowo
UNIQUE KEY keyword_id (keyword_id),
UNIQUE KEY keyword_keyword (keyword_keyword)
) TYPE=MyISAM;
--------------------------------------------------------
Struktura tabeli dla coyote_side
CREATE TABLE coyote_side (
side_id mediumint(8) NOT NULL auto_increment, # id strony (unikalne)
side_url varchar(128) NOT NULL default '', # url
side_title varchar(100) NOT NULL default '', # tytul
side_update int(11) NOT NULL default '0', # data analizy
side_length mediumint(9) NOT NULL default '0', # ilosc slow
UNIQUE KEY spider_id (side_id)
) TYPE=MyISAM;
Spider na razie dziala nastepujaco:
- Podaje mu tabele - np. tabela z artykulami
- Konstrulowane jest zaptyanie majace "wyciagnac" liste slow z tytulu artykulu oraz jego tresci
- Analiza tytulu oraz tresci (wycinamy czesto powtarzajace sie slowa, usuwamy znaki interpunkcyjne oraz rozdzielamy kazde slowo do tablicy)
- w petli sprawdzamy czy dane slowo znajduje sie juz w tabeli coyote_keyword
4.1.) jezeli nie - dodajemy je oraz uzyskujemy ID tego slowa w tabeli
4.2.) jezeli tak - odczytujemy ID tego slowa - kolejna ieracja sprawdza, czy nastepny element tablicy to to samo slowo (czy sie powtarza)
5.1.) jezeli tak - zwiekszmy licznik danego slowa znajdujacego sie w artykule
5.2.) jezeli nie - dodajemy do tabeli coyote_engine ID slowka oraz ID strony a takze ilosc wystapien danego slowa na stronie oraz czy dane slowo wystepuje takze w tytule strony - sprawdzamy kolejny rekord
Na razie dziala to tak sobie (w trakcie testow), klasa Spider tez jest jakas taka nijaka. URL strony takze jest generowany dynamicznie - np. jezeli mamy od czynienia z FAQ, to wiadomo, ze URL bedzie: http://4programmers.net/view_faq.php?id=[ID wskazowki]
Na pierwszych pozycjach w wyszukiwarce beda strony, w ktorych dane slowko wystepuje w temacie oraz w tresci. Drugim krytetium bedzie liczba szukanych slowek znajdujacych sie na jednej stronie.