По соображениям производительности вам, скорее всего, потребуется периодический процесс построения индекса. Есть очень изощренные способы сделать это, но также возможно сделать что-то достаточно разумное очень простым способом.
В глубине души «указатель» - это то же самое, что вы найдете в конце учебника, но воплотите эту идею в компьютерный мир. Вы захотите просмотреть свои таблицы описаний и создать ключ / значение «словарь», «хэш», или как называется эквивалентная структура вашего языка. Ключами будут слова, которые вы найдете в вашем описании. Значения будут массивом (или списком, или как там называется ваш язык) URL-адресов, в которых можно найти это слово.
Когда вы обрабатываете запрос, вы разбиваете слова в запросе и просматриваете каждое из них в своем словаре. Тогда каждый «URL» может получить очко за каждое слово, которое содержит URL. Затем вы оцениваете свои результаты в зависимости от того, сколько очков имеет каждый URL. В качестве альтернативы вы можете вернуть только результаты, содержащие все слова, выполнив заданное пересечение между всеми различными массивами URL, которые вы найдете, выполнив поиск ваших слов.
В зависимости от того, чего вы пытаетесь достичь, вы можете получить более изощренные сведения о том, как создать свой индекс, например, использовать фонетическое представление слов в качестве ключей вместо самих необработанных слов. Когда вы выполняете поиск, разбивайте поисковые термины на их фонетические представления, и таким образом вы можете устранить проблемы, связанные с обычными орфографическими ошибками.
В качестве альтернативы вы можете обратиться к общим орфографическим ошибкам непосредственно, создавая дубликаты ключей для каждого слова.
Кроме того, вы также можете индексировать буквенные триплеты, а не целые слова, чтобы поймать альтернативные формы слов с различными временами и спряжениями.
и т.д.. и т.д.
Возможно, вы захотите не создавать этот индекс для каждого запроса (в противном случае, какой смысл?), Поэтому вы захотите сохранить его на диск и загрузить (или его части) в память во время запрос. Используете ли вы базу данных или что-то для этого, я оставляю на ваше усмотрение.