For your specific needs, I second the suggestion for using a Google Custom Search Engine. Of course, if you're really hell-bent on hosting the search on your own hardware, look into something like the sphinx full text search engine. And, taking it a step further, if this is a learning project, look into trigrams and fuzzy search.
Using trigrams (n-grams of length 3), you'd basically have to index all of your text in groups of 3 characters and/or 3 words at a time, along with their number of occurrences. You'd then break the user's query into trigrams and perform some magic to locate a few approximate matches, and then evaluate the top approximates more closely with another fuzzy match (one that can produce a percent-similarity and is possibly less fuzzy than the first match).
Of course, the exact algorithm could be pretty "simple" ... or you could get pretty complex--say, breaking the search string into token/word trigrams, determining what the user probably meant to type, and then performing some more precise matching (but still fuzzy) based on a modified search string (or set of top most likely strings).
The idea is to index your data in such a way that you can look at its content statistically. Take the following short string, for instance ...
You [might] get the following trigram counts (with respect to characters (and this varies based on how you treat word boundaries)):
So, when you're user searches for "slick" and you get the following trigrams:
... You know that you probably don't have a good match. The only trigram from your database that matches is ick, and ick is a "common" trigram--so, not very informative/useful.
However, when your user searches for "sick cow" and you get the following search trigrams:
You match 3 trigrams, ick (matches, but is unimportant), sic, and ck_. You've got 2 matches on trigrams that appear infrequently in your database. Those are fairly good indicators that the user searched for something related to the records that those trigrams were taken from.
Of course, in a real search, when you're dealing with much more data, you'll probably ignore trigrams that are both above and below certain thresholds. You want to avoid matching both millions of records and/or a small number of records that are probably meaningless. And you'll probably have to tweak your algorithms and thresholds pretty regularly to continue delivering quality results without demolishing your server ... A bad threshold can bring your server to its knees indefinitely.
... use a Google Custom Search Engine.