В общем, вам нужен инвертированный индекс . Вы можете выполнить индексацию самостоятельно, но для правильной работы нужно проделать большую работу - вам нужно обработать основы , стоп-слов , расширив список публикаций для включения позиций в документ, чтобы вы могли может обрабатывать запросы из нескольких слов и так далее. Затем вам нужно сохранить индекс, вероятно, в B-Tree на диске - или вы можете упростить себе жизнь, используя существующую базу данных для хранения на диске, такую как BDB . Вам также необходимо написать планировщик запросов, который интерпретирует пользовательские запросы, выполняет расширение запроса и преобразует их в серию сканирования индекса. Статья Википедии о Индексировании поисковой системы также дает хороший обзор всех проблем.
Или вы можете использовать существующую работу и использовать готовые решения для полнотекстового индексирования, такие как Apache Lucene и Compass (который построен на Lucene). Эти инструменты обрабатывают практически все подробности, описанные выше (и даже больше), поэтому вам остается только написать инструмент для построения и обновления индекса, передав все ваши документы в Lucene, и пользовательский интерфейс, позволяющий пользователям выполнять его поиск.