Почему вы думаете, что решение (3), основанное на сфинксе, требует "многократного сканирования сайта"? Sphinx может принимать и индексировать множество различных источников данных, в том числе MySQL и PostgreSQL «нативно» (есть дополнительные надстройки для других БД, таких как Firebird) - вы можете хранить ваши HTML-документы в виде столбцов в БД, если хотите (современный PostgreSQL версии не должны иметь проблем с этим, и я думаю, что MySQL тоже не будет), просто используйте Sphinx превосходную индексацию и полнотекстовый поиск (включая stemming & c). В конце концов, все ваши метаданные поступают из заголовков (плюс тело HTTP-запроса, если вы хотите отслеживать запросы, в которых вы отправили данные, но никак не тело HTTP-ответа).
Одно важное практическое соображение: я бы порекомендовал стандартизировать UTF-8 - HTML придет к вам во всех видах странных кодировок, но не нужно сходить с ума, поддерживая это во время поиска - просто перекодируйте каждую текстовую страницу в UTF-8 по прибытии (из какой бы странной кодировки он не входил), до того, как его сохранить и проиндексировать, и жить долго и счастливо.
Возможно, вы могли бы использовать особые нетекстовые ответы, чтобы сохранить эти в файлах (я могу представить, что выделение гигабайт в БД для хранения, например, видео, которые в любом случае не могут быть проиндексированы в теле, может быть хорошее использование ресурсов).
Кстати, Sphinx поставляется с привязками Python, как вы и просите.