Wyszukiwaka w PHP

2010-05-02 , Papiewski Łukasz , Programowanie / Kodzenie

Potrzeba takiej opcji występuję nie tylko ze względu, że wszyscy ją mają na swoich stronach ale także ze względów sprawiających, że łatwiej jest się po stronie się poruszać, odnajdywać artykuły po informacji jakie posiadają, specyficzne, konkretne produkty bądź ich kategorie. Statystyki pokazują, że dobrze zaimplementowana wyszukiwarka może zwiększyć liczbę odwiedzin nawet o 30%.

Istnieje wiele metod aby to osiągnąć w zależności. Można kupić (zrobić) program skanujący cały portal i generujący statyczne strony z wynikami przeszukiwań.

Można skorzystać w wyszukiwarki Google. Jeśli posiada się konto, należy zapisać się na usługę korzystania z takowej przeglądarki, pobrać kod w javascript i umieścić w odpowiednim miejscu na stronie.

Inną jeszcze metodą, której rozwiązanie tym razem jest po stronie serwera i która wymaga bazy danych do przeszukiwania, jest wyszukiwarka napisana w PHP.

Przykład najprostszego rozwiązania

Zacznijmy od prostego przykładu gdzie będziemy szukać wyrazu 'form'. Nasza standardowa tabelka w bazie posiada pola: id, shortTitle,title,text;

function search($string){
 
	$sql = "SELECT * FROM Content 
        WHERE (title LIKE '%$string%' or shortTitle like '%$string%') 
        and text LIKE '%$string%' ORDER BY id DESC";
	$r = mysql_query($sql) or die(mysql_error());
	$total = mysql_num_rows($r);
 
	if($total>0) {
	    while ($l = mysql_fetch_assoc($r)) {//echo out the results
		echo a2($l['title'],"href=#{$l['shortTitle']}").br();
	    }
	} else
	    {
		echo "No results to display";
	    }
 
    }

Steeming

Wyszukiwanie pełnotekstowe

Trochę bardziej zaawansowane w implementacji. Istnieje sporo rozwiązań, dodatków do PHP, modułów, czy gotowych klas bądź produktów. Moja propozycja to wykorzystanie wbudowanego w bazę 'MySQL' a dokładniej silniku 'MyISAM', gotowego mechanizmy pełnego wyszukiwania. Dodajemy w tabeli:
ALTER TABLE Content ADD FULLTEXT(title,text);
Podmieniamy zapytanie:
$sql = "SELECT *, MATCH(title,text) AGAINST ('".$string."') AS score FROM Content 
	    WHERE MATCH(title, text) AGAINST ('".$string."') ORDER BY score DESC";

Cytaty

- Simplicity is the ultimate sophistication. - Leonardo da Vinci,
- Popularny człowiek wzbudza zawiść potężnych - Thufir Hawat o Leto Atrydzie (na Kaladanie),
- Szczęście następuje po smutku, a smutek po szczęściu; człowiek jest naprawdę wolny, gdy przestaje rozróżniać między smutkiem a szczęściem, między dobrem a złem - Aforyzmy buddyjskie.