Для дальнейшей поддержки Ivans ответ выше, Lucene - это путь. Вы не упомянули, на какой платформе вы работаете, поэтому я укажу, что вы тоже можете использовать порт .NET.
Если вы используете Lucene, есть очень хорошая книга Мэннинга на эту тему, которую я рекомендую вам посмотреть.
Когда дело доходит до заполнения вашего индекса, у вас есть несколько вариантов. Для начала вы можете просто сбросить весь ваш текст в индекс и позволить движку просто искать по нему. Однако я бы порекомендовал добавить в индекс фиксированные поля, которые позволят вам поддерживать такие вещи, как многораздельный поиск или поиск только по этим полям.
Чтобы объяснить, допустим, у вас есть поле для веб-сайта. Затем вы можете разделить свой индекс, ограничив поиск по индексу теми документами, которые имеют этот веб-сайт в этом поле.
Другой процесс заключается в извлечении точек интереса из вашего документа и разрешении поиска по ним без поиска по всей записи индекса. Ваш пробег может варьироваться в зависимости от этого, поскольку движок lucene очень хорошо написан, поэтому он может просто позволить вам собирать результаты поиска в более логичные единицы, что поможет вам в вашем решении.
Я сделал это сам, и это помогает, отвечая на вопросы руководства о том, что именно ищется и индексируется.
НТН!