Спасибо, идея хорошая. Отправлена в мозг на обработку :)
Сервер не мой. И тратиться я не собираюсь, так как для меня это скорее игрушка, нежели работа.
Ну надо же, про меня вспомнили!!!
Большая часть веремни уходит не на расчет CRC, а на поиск CRC основной формы слова.
Я храню таблицу CRC-CRC в виде Б-дерева, его размер составляет около 15Mb. На одно слово требуется от 5 до 10 сравнений (а данные хранятся на диске), а таких слов на странице может быть 100 штук. Шерстить 15 мегабайтный файл не очень быстро. Держать его в памяти не имеет смысла, так как поиск производится не более 200 раз в день, а серверу есть чем занятся и без поиска.
Я в этой проблеме особо не разбирался. Какие есть другие варианты ?
никак.
У меня уже есть участок текста, который необходмо вывести в результатах, и я уже знаю, что найденное слово начинается, скажем, с 15-ой позиции.
Наример: поисковая фраза "тестовый поиск"
Выводится цитата:
"... в этом случае при тестовом поиске не было найдено требуемых документов, но при изменении поискового запроса ..."
Первое слово "тестовом" выделить не проблема, я точно знаю, что оно там есть, и начинается с 15 позиции.
Но проверить надо и остальные слова. Ведь еще надо выделить слово "поиске" и "поискового".
Словарь хранится в виде CRC32 основной формы, и CRC32 слова. По CRC32 слова я нахожу CRC32 основной формы и сраниваю с CRC32 основной формы слов из поисковго заросва - совпадает - выделяю.
Можеть есть можно выделить как-то без обращения к словарю ?
Господа, это не читать. Глупый был когда писал. Умирает буквально на паре гигов.
Я рекомендую почитать Кнута. У него целый том есть - Сортировка и Поиск (2-ой, если я не ошибаюсь) а особенно про Б-Деревья.
Я считал CRC32 слова и использовал их, как ключ в Б-Дереве, а слова я вообще не использовал.