La búsqueda en la base de datos real está bien hasta que desee agregar características elegantes como la anterior. En mi experiencia, es mejor crear una tabla de búsqueda dedicada, con palabras clave y ID de página/URL/etc. Luego complete esta tabla cada n horas con contenido. Durante este llenado, puede agregar fragmentos para cada documento para cada palabra clave.
Alternativamente, un truco rápido podría ser:
<?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;
?>