Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%)
|
Ponieważ zaciekawiło mnie to co napisał Dragossani w <b>tym</b>wątku, postudiowałem manual do MySQLa i oto co z tego wynikło - wyszukiwarkę z określaniem trafności można zrobić jednym zapytaniem :-)
<i><b>Jak zrobić wyszukiwarkę?</b></i> Zacznijmy od początku: zakładamy, że chcemy zrobić własną wyszukiwarkę do forum phpBB. Na początku dodajemy do istniejącej tabeli prefix_posts_text jedno pole:
Jeżeli wszystko przebiegło pomyslne to możemy zająć się stworzeniem zapytania formularza wyszukiwania. Do wyszukiwania używamy funkcji mysqla
która zwraca wyniki trafności wyszukiwania. Teraz zróbmy z tego zapytanie:
zakładając, że w zmiennej $_POST["f"] mamy szukane wyrażenie. Jeżeli zapytanie działa, to jedziemy dalej, jeżeli nie to szukamy rozwiązania w manualu. Teraz przypisujemy odpowiednie wartości do tablic:
Teraz przygotujmy wyświetlanie wyników. Ponieważ zwracane wyniki trafności nie są za każdym razem identyczne, wyszukujemy najwiekszą wartość:
Teraz (w pętli) z proporcji obliczamy procenty trafności każdego zapytania, i wyświetlamy dane:
I wyszukiwarka gotowa :-) :arrow: <b>Przykład</b> Powyżej można zobaczyć przykład działania wyszukiwarki podpiętej pod phpBB. <i><b>Metoda działania wyszukiwarki.</b></i> (na podstawie moich obserwacji) Trafność zostaje wyliczona w następujący sposób - jest liczona ilosc szukanych słów i podstawiona do ilości ogólnej wyrazów w ciągu i na podstawie tego zostaje zwrócona wartość. Czyli mówiąc prościej - na górze strony wyszukiwania (największa trafność) będą posty z najwyższym stosunkiem wyrazów do szukanego ciągu, czyli np. najkrótsze posty z największą ilością szukanych słów. Ograniczeniem jest długość ciągu - wyszukiwarka działa dopiero przy szukanych wyrażeniach dłuższych niż 3 znaki. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 548 Pomógł: 2 Dołączył: 19.07.2003 Ostrzeżenie: (0%)
|
witam ...
pozwolilem sobie zoptymalizowac ta funkcje ... wg moich testow oraz obserwacji [obie funkcje wywolane w 2 oknach na tej samej bazie ] dzialanie [ zwracane wyniki ] jest identyczne ... oto poprawiony kod: [php:1:38f3001feb]<?php $query = "SELECT MATCH( kolumny full text ) AGAINST (".$_GET['szukane'].") AS stopien, reszta, oddzielona, przecinkami FROM nazwabazy ORDER BY stopien DESC"; $result = mysql_query ($query) or die (mysql_error()); $n=0; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)){ if($line["stopien"]>0){ $stopnie[]=$line["stopien"]; $proc=round((($stopnie[$n++]*100)/$stopnie[0]),2); print ' wszystkie kolumny spelniajace kryteria z bazy sa wyswietlane przez $line['nazwa_kolumny'] dodatkowo w zmiennej $proc jest procentowo zawarta wartosc stopnia danego rekordu w porownaniu z rekordem maksymalnym '; }//* } ?>[/php:1:38f3001feb] * gdy bawilem sie ta funkcjia [poprzednia rownierz] zauwazylem [mysql_num_rows();] ze ilosc odebranych wierszy jest wieksza niz ilosc wyswietlonych .... tu mozna wsadzic wyswietlanie rekordow w inny sposob wtedy gdy stopnien = 0 [slowo jest za popularne lub nie znalezione] ale UWAGA po wpisaniu np print " nie znaleziono" ten komunikat zostanie wyswietlony tyle razy ile line['stopien'] > 0 [ dzieki petli while] teraz moze kilka wyjasnien ... [php:1:38f3001feb] $max=$stopnie[@array_search(@max($stopnie),$stopnie)]; ?>[/php:1:38f3001feb] po co (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) przecierz wyniki zapytania ukladane sa wg stopnia [od najwiekszego do najmniejszego] a maxymalna wartosc jest na pozycji 0 w tabeli stopnie ... [php:1:38f3001feb]<?php $proc=floor(($stopnie[$i]*100)/$max); ?>[/php:1:38f3001feb] mozna wsadzic prosto do petli : [php:1:38f3001feb]<?php $proc=round((($stopnie[$n++]*100)/$stopnie[0]),2); ?>[/php:1:38f3001feb] ponaddto stosujac round dos tajemy ladniejsze wyniki np w miejsce 90 z florem mamy 91 z round funkcja jest mniejsza ... ma mniej tabel [ odpada: [php:1:38f3001feb]<?php $stopnie[]=$t["stopien"]; $IDs[]=$t["post_ID"]; $sub[]=$t["post_subject"]; $post[]=$t["post_text"]; ?> [/php:1:38f3001feb] ] i wszysko jest w 1 petli ... co o tym sadzicie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) wszelkie komentarze mile widziane (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :D cya |
|
|
|
spenalzo Opis jak zrobić wyszukiwarkę z wyświetlaniem trafności 22.08.2003, 20:30:56
Wankster WOW! Dzięki spenalzo! Dzięki bardzo! 23.08.2003, 01:54:07
Marusz Haha, najbardziej podobał mi się pierwszy post po ... 23.08.2003, 14:10:52
wojto spenalzo dzieki za ta wyszukiwarke, kiedys probowa... 23.08.2003, 14:38:59
spenalzo CytatHaha, najbardziej podobał mi się pierwszy pos... 26.08.2003, 21:39:21
sivyer Artykul "Using MySQL Full-text Searching" dostępny... 27.08.2003, 08:01:52
Mnichasso A można by tak dać opis wyszukiwarki szukającej w ... 27.08.2003, 20:51:53
spenalzo CytatA można by tak dać opis wyszukiwarki szukając... 27.08.2003, 21:55:25
Mnichasso a dało by sie zrobić wyszukiwarke na mysql która b... 29.08.2003, 09:09:51
spenalzo Cytata dało by sie zrobić wyszukiwarke na mysql kt... 29.08.2003, 13:27:43
msulik Może coś zrobiłem nie tak, ale mnie się to nie pod... 29.08.2003, 21:47:29 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 08:20 |