La recherche dans la base de données réelle est correcte jusqu'à ce que vous souhaitiez ajouter des fonctionnalités élégantes comme celle ci-dessus. D'après mon expérience, il est préférable de créer un tableau de recherche dédié, avec des mots-clés et des ID de page/URL/etc. Remplissez ensuite ce tableau tous les n heures avec contenu. Au cours de cette population, vous pouvez ajouter des extraits pour chaque document pour chaque mot clé.
Alternativement, un hack rapide pourrait être :
<?php
$text = 'This is an example text page with content. It could be red, green or blue.';
$keyword = 'red';
$size = 5; // size of snippet either side of keyword
$snippet = '...'.substr($text, strpos($text, $keyword) - $size, strpos($text, $keyword) + sizeof($keyword) + $size).'...';
$snippet = str_replace($keyword, '<strong>'.$keyword.'</strong>', $snippet);
echo $snippet;
?>