Вобщем я тут подумал, поэкспериментировал и есть один вариант.
Но индексировать, хотя бы один раз, если форум не новый, придется. В дальнейшем индексация не понадобится.
Смысл в следующем. Берем все посты темы, склеиваем их в один текст и каленным железом вырезаем оттуда все цитаты (они не нужны, так как 95% это цитирирование предыдущих постов и эти цитаты просто увеличат размер индексной базы), квотирование любых кодов (так как в обычном поиске они тоже вырезаются), вставки тегов img, url (не трогаем текст в теге если он есть). Далее вырезаем просто теги b.u.i center и все такое. Вырезаем вставки смайлов, слова меньше 3 символов и все символы кроме букв и цифр. Это значительно сократит индексную базу и время поиска.
Например индексация всего этого форума на котором
Цитата:Сообщений: 50521
Тем: 4482
с вырезкой только слов короче 3 символов и вырезкой не буквенных и не численных символов заняла 7 сек. Поиск по такому индексу во всех разделах словосочетания "список матерных слов" (точное совпадение фразы) занял примерно 0.3 сек и выдал один единственный точный результат со всего форума. Поиск с той же фразой, но с учетом того что искалось любое слово из фразы, занял 1.39 и выдал 1021 результат.
Размер базы индекса при этом составлял 13024 kb, тогда как база старого поиска занимает 21020kb. Но в новой базе не вырезаны цитаты. коды и все такое... То есть размер базы уменьшится еще и возможно уменьшится скорость поиска.
При старой индексации в индекс заносились только уникальные слова темы. то есть повторения удалялись. В принципе в моем варианте можно сделать то же самое. Опять же уменьшиться индекс процентов на 30-40 (с цифрами могу ошибаться, надо проверять).
Какие плюсы у этого поиска?
Не нужно постоянно индексировать поиск. Переиндексация темы будет производиться с любым изменением темы (удаление, создание ответа, перенос постов, редактироование). Новый индекс для темы будет создаваться при создании темы.
при поиске можно задавать несколько опций:
1. Искать фразу целиком
2. Искать точное вхождение любого из слов фразы (ищем "
город" получаем "
город" )
3. Искать неточное сопадение слов из фразы (ищем "
город" получаем "
городок" и "при
городный" )
В старом поиске следовать точно выполнять эти правила не получалось. Либо так либо так при разных схемах индексации.
Появится возможность вывода не всего списка найденных тем, а по определенному кол-чу на страницу.
Пока точно не знаю, но возможно получится выводить темы отсортированными по дате последнего сообщения, или по дате создания темы (это точно пока не знаю, не пробовал
)
Какие минусы? Минус пожалуй один, это скорость поиска. В отличии от старого поиска (хотя честно говоря я никогда не смотрел сколько время занимал старый поиск) медленне раза в два. возможно чуть больше.
Отсюда продолжение минуса, поиск на больших форумах как этот лучше вести по разделам. Для небольших форумов поиск по всем разделам никак не скажется на скорости работы.
Но в случае если использовать новый вариант поиска, глюков железно будет намного меньше, если совсем их не будет
.
Сегодня попробую сделать это на нашем форуме и посмотрим что получится.
Жду высказываний и предложений по существу, возможно кто-то предложит что-то для ускорения работы поиска.