Вопрос №1. Полнотекстовый поиск выполняется по такому методу? Или есть проще, быстрее и лучше? Код (Text): $sql= " SELECT `text`, `theme`, `id` FROM `posts` WHERE `text` LIKE '%".addslashes($word[0])."%' AND/OR `text` LIKE '%".addslashes($word[1])."%' [...] AND/OR `text` LIKE '%".addslashes($word[...])."%' LIMIT ".$from.", ".$count.";"; //естественно, запрос циклом создается, убрав из него короткие слова, спецсимволы и т.д. и т.п., а AND/OR выбираются, исходя из заданной логики запроса. //слова в пределах от 4 до 13 символов, количество слов ограничено тремя. //а поле `text` в таблице указано FULLTEXT и входит в ее PRIMARY Вопрос №2 Если кешировать запросы, то лучше: сохранить в базу список слов, время запроса и ответ поиска. А потом смотреть скриптом, спрашивали ли такие же слова с такими же AND/OR, выводить ответ + искать слова в постах, что были созданы после указанного времени запроса сохранить в базу хеш запроса (вместе с AND/OR между словами), время поиска и ответ поиска. Скрипт делает то же самое, но не учитывает порядок слов - просто сравнивает хеши) те же два варианта, но поиск по новым постам идет, только если кеш в базе старее определенного времени, например, 15 минут. не сохранять ничего в базу, т.к. поиск все-равно надо дополнять еще одной выборкой из базы. Вопрос №3 Стоит ли вкручивать в строку запроса AJAX с "похожими запросами, которые дали результат", чтобы повысить вероятность выбора одного из кешированных результатов. При этом в кеше не хеши, а также запросы, не давшие результата, чтобы AJAX-ом выводить, что ими ничего не найдено? Вопрос №4 Есть ли смысл запретить пользователям (см. ниже кол-во постов - это причина возникновения идеи) искать "по всему форуму", указав обязательным выбор раздела. Вопрос №5 Как ставить LIMIT в случае кеширования запроса для постраничного вывода? Ведь все равно на какой странице пользователь, а ответ надо закешировать целиком... P.S. (1) На форуме 100 000+ сообщений и растут, как в чате. :roll: P.S. (2) В исходники IPB, PHPBB и т.д. и т.п. не отправлять. :!: P.S. (3) Идея про "забить на поиск и вставить форму Яндекса" уже была - не подходит. Не предлагать :lol:
Спасибо, читал про полнотекстовый, но не такой вариант. а AJAX относится к форме, куда юзверь вводит слова для поиска.
Чтобы думать про кэши нужно знать, как часто изменяется информация в базе. Если часто, то их придется постоянно сбрасывать, только гемор лишний, а пользы ноль.
... ну, не как в чате, но за день выходит 100+ точно (минимально). Необходимо учесть все возможные оптимизации кода, а точнее найти золотую середину между нагрузкой от "оптимизаций" и нагрузкой, которую эти "оптимизации" сбрасывают с сервера. Насчет сброса кешей я выше предложил делать методом True-Thru на 15 минут, т.е. кеш действителен 15, а дальше его стирают. P.S. Чистка базы от таких мелочей производится кроном (для всего сайта хватает 5-ти запросов "DELETE FROM `bla-bla-bla` WHERE `time` < 'bla-bla-bla';".
Понимаешь, "если" не устраивает, это не тот случай, когда можно на время вырубить любую часть сайта В общем, жду-с остальных мнений, как этот кеш сделать лучше )
можно попробовать хранить хеши запросов примерно таким образом: PHP: <? $sw=explode(" ", $query); asort($sw); reset($sw); $hash=md5(split("",$sw)); ?> и хранить такие хеши..... хотя я вообще не уверен нужно ли хеширование.... если делать - то тогда впринципе это довольно сложный механизм..... и вот так за 3 минуты не решается....
Какой смысл хранить 15 минут? За это время эта процедура себя не окупит. Как хэшировать? md5()? Эта функция сама по себе весьма тормозная. Не тем вы, гражданин, заняты.
vasa_c ну md5 это к примеру.... а вобщем согласен с вышесказанным..... mysql сам отлично кеширует запросы..... Хотя может возникнуть необходимость кеширования...... но думаю когда она возникнет - сайт уже надо будет глобально переписывать на С++ с оптимизацией всего что можно.... И механизмы кеширования продумывать самому...... Кешировать средствами пхп - дело достаточно малопроизводительное..... Я думаю у Вас не Яндекс, где кеширование реально оправдывает затраты времени..... ну а если Яндекс - то думайте сами....... думаю в таком случае девелоперы должны быть толковыми....
Угу, ясно. Спасибо. Так, а как насчет поиска в целом? Просто использовать MATCH в sql-запросах для полнотекста и на этом остановиться, а MySQL сделает все остальное за меня?
Ну, тогда все оказалось гораздо проще, чем я ожидал... даже дописывать к коду нечего .. Что ж, думаю, все вопросы решены. Тему можно закрывать )