Хотя другие ответы дают хорошие предложения, такие как использование Lucene, я бы предпочел использовать пользовательский метод кэширования.
Итак, для веб-сайта, который я помогаю создать, мы кэшировали данные для поиска каждые несколько часов из многих таблиц в одну простую таблицу со столбцами, такими как:
- URL
- Элемент / Название страницы
- Основные ключевые слова
- Только текстовое содержание
- Дата обновления
Затем я написал бы свой оператор SQL для поиска в этом поле, используя различные функции для определения ранга.