This can be answered several ways. Do you need to search the site dynamically (each time the user clicks search), or can you run a cron job that periodically builds the indexes? The first method is rough on the server if you have a lot of hits. The second method doesn't work as well when you have a site with high dynamic content.
There's also the question of do you to seach on ANY text in the web page, only META tag information, support boolean logic searchs, fuzzy matches, sub-searches, etc.
I'm sure there are better sources, but
Matt's Script Archive has an OK basic search utility.
I've seen this question a lot, and the answer is very dependant on your needs. There are, by the way, a least two dozen free search scripts out there. I don't have URLs for them, but a search in Alta Vista should turn them up for you.
--Chris