Возникла необходимость организовать поиск в ЛС без Сфинкса. Помню — пробегала здесь такая тема. Нашел. Но не устроило то, что установка его без хака не обходится. Плюс показалось, что запросы используются довольно тяжелые. Поэтому решил быстренько написать свой модуль.
Что он умеет:
1) Ставится, как обычный модуль, без всяких хаков, не требует доработки/модификаций стандартных модулей и файлов ЛС или шаблонов, использует только документированные возможности ЛС. Установка может быть автоматическая (есть простейший инсталлятор) или ручная.
2) Ищет требуемые слова в заголовках и теле опубликованных топиков, а также комментариев. Поиск осущствляется без всякой морфологии и прочих заморочек. В найденных текстах высвечивает искомые слова.
Специальное замечение для тех, кто решил, что можно весело жить без Сфинкса:
На небольших базах такой поиск должен работать без особых проблем. Но чем больше топиков, тем медленне будет осуществляться поиск. И если ваш проект быстро растет, то рано или поздно упретесь в то, что поиск осуществляется слишком медленно. На каком объеме это произойдет — 1000 топиков, 100000 топиков — я не знаю, не тестировал. Но помнить об этом нужно. Кстати, если кто-то решит провести тест — отпишитесь, думаю, всем будет интересно.
Ну вот, как-то так. После прохождения модерации модуль будет доступен здесь: livestreet.ru/addons/74/
Ну, и как обычно — реквизиты для добровольных пожертвований: кошельки WebMoney Z178319650868 или R312496642374, счет Яндекс.Деньги 41001176375531.
UPD Известные проблемы:
1) Если искомые слова задавать маленькими буквами, то топики, где эти слова заданы большими буквами, будут найдены, но не будет подсветки искомых слов.
2) Если задавать поиск большими буквами, то поиск не работает
UPD Версия 1.0.7: исправлены ошибки и добавлена махонькая фича: теперь возможен поиск строгий и нестрогий. Подробнее здесь: livestreet.ru/blog/2228.html
UPD Версия 1.0.8: из результатов поиска исключены черновики
UPD Версия 1.0.9: теперь поиск и по комментариям.
UPD Версия 1.0.11: Исправлен баг — при запросе меньше 3 символов возникал цикличный редирект
Спасибо, устанавливается действительно легко и без гемора, но есть мелкий недочет — если в поисковом запросе присутствует хоть одна заглавная буква, возникает ошибка.
У меня на странице с результатами вылазит вот такая ошибка:
Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in ActionMysearch.class.php on line 48
Выложена версия 1.0.8 — исправлены ошибки и добавлена махонькая фича: теперь возможен поиск строгий и нестрогий (подробности здесь: livestreet.ru/blog/2228.html), а также из результатов поиска исключены черновики
Выложена версия 1.0.9 — теперь поиск и по комментариям.
Кстати, обнаружился «подводный камень», о котором необходимо знать: если вы на своем сайте организуете какие-то особые виды блогов с ограниченным доступом, то поиск это не будет учитывать. Поиск идет по всем опубликованным топикам, невзирая на вероятные особенности блога.
avadim, спасибо! а, вот я видел вкладки, но не подумал даже :) но у меня всеравно не работает — www.rashalaika.ru/ — поиском пытаюсь найти слово «надежное» (без кавычек, есть в коментарии в этом топике www.rashalaika.ru/blog/ekipirovka/8.html#comments) но в результате «Удивительно, но поиск не дал результатов»
На твоем сайте еще кое-какие баги вылезли.
Сейчас выложил версию 1.0.10, попробуй, как работает, и дай знать.
Апгрейд делается так же, как и первичная установка.
Проверил сейчас — «надежное» все равно не находит. Но зато находит по шаблону «надежное*». Значит, система воспринимает многоточие, как часть слова, а не как его границу. Боюсь, «медицина тут бессильна» и я ничего сделать не смогу, потому что это уже «фича» от MySQL.
Да, именно так. Но вот почему у тебя вечный редирект происходит — это непонятно.
Может, что-то недоустановилсь? Попробуй руками поставить модуль. В ридми описано, как это делается
if (!func_check($sRequest, 'text', 2, 255)) {
/**
* Если запрос слишком короткий перенаправляем на начальную страницу поиска
* Хотя тут лучше показывать юзеру в чем он виноват
*/
func_header_location(DIR_WEB_ROOT.'/'.ROUTE_PAGE_MYSEARCH.'/');
}
А как собственно говоря какое-нибудь сообщение нативными методами ЛС вывести?
И да, почему-то в моем случае если вводить например двухбуквенный запрос выдается 302 Found и идет перенаправление опять на /mysearch/ и так далее пока браузер не скажет — хватит :) (два дня копаюсь не могу понять этого странного поведения)
Ах, вот оно что! Двухбуквенный запрос! Я действительно минимальное число букв сделал 3, т.к. имхо 2 буквы в запросе — это совем не айс. Но, честно говоря, не проверял, как себя модуль ведет, если двухбуквенный запрос ввести. И, сдается мне, что не совсем корректно. Щас проверю
Выложена версия 1.0.11, в которой исправлен досадный баг: если запрос был меньше 3 символов, то возникал цикличный редирект. Рекомендуется обновиться всем, кто ставил этот модуль.
Хелп!!! Перестал вообще поиск работать (http://www.avtoturistu.ru/search/topics/?q=%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B0), а на двухсимвольный ФФ по-прежнему пишет
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.
короче, создает очень приличную нагрузку на сервере. показатели резко увеличились. причем с 28 числа как только я установил этот поиск. вот CPU сегодня уже 1576.28 из 500! всегда было меньше 200.
Кол-во уников стабильно около 50 в сутки. даже когда на прошлой неделе (до установки mysearch) было по 300 в сутки такого не было.
В общем может параноя, но причиной вижу данный скрипт.
Как удалить mysearch?
1) Для удаления модуля смотрим список файлов, входящих в его состав, и прибиваем их (автоматического «удалятора» нет). Для экстренного удаления, думаю, достаточно будет удалить HookMysearch.class.php из папки с хуками (тогда не будет перенаправления на mysearch
2) А какая версия стоит? Если ниже 1.0.11, то рекомендовал бы прежде, чем удалять, ее поставить. Очень смущает, что число запросов /mysearch/ в 300 раз больше, чем favicon.ico. Есть впечатление, что много циклических редиректов, которые возникали при двухбуквенном запросе, которые были описаны выше, и которые устранены как раз в последней версии.
Лежать файл должен здесь: classes/hooks/HookMysearch.class.php
Кстати, на модерации сейчас новая версия: livestreet.ru/blog/2260.html Там можно отключать модуль, не удаляя его.
А по поводу решения проблемы: я так понимаю, у тебя шаред-хостинг. А кусок серверных логов поддержка может дать? Очень хотелось бы глянуть, как, откуда, в каком порядке идут запросы к /mysearch/. Ведь если у тебя такая фигня, то у кого-то другого тоже может вылезти. Хотелось бы все же докопаться до причин.
Хотя, отключить совсем модуль не получится, если идет прямое обращение к /mysearch/, то оно будет отрабатываться. Выключить можно только редирект с /search/ на /mysearch/.
Ошибка такая, скорее всего, из-за того, что недостаточно прав на удаление/копирование файлов в папке из скрипта. Решается либо установкой необходимых прав и повторным запуском инсталлятора, либо заливкой ручками.
И если уже залил все ручками, то зачем инсталлятор запускать? Просто проверь и убедись, что все работает :)
89 комментариев
ps: спасибо за модуль
Награду Герою!
По юзерам — искать имя юзера?
И по блогам — искать по названию и описанию блога?
По блогам да в описании.
По логину, имени, стране, «о себе»
Или на странице результатов сделать вкладки соответствующие, а поиск пускай изначально везде ищет.
Как исправить, подскажите, пожалуйста.
Молодец, а то подключал всё время гугль ^_^
Очень нужный модуль! Спасибо!
В результатах топики из черновиков преднамеренно показываются? Может не стоит их выводить?
Спасибо за ваш труд!
Спасибо!
Просто заново установить модуль?
Кстати, обнаружился «подводный камень», о котором необходимо знать: если вы на своем сайте организуете какие-то особые виды блогов с ограниченным доступом, то поиск это не будет учитывать. Поиск идет по всем опубликованным топикам, невзирая на вероятные особенности блога.
В результатах поиска кликнуть по вкладке «Комментарии»
Сейчас выложил версию 1.0.10, попробуй, как работает, и дай знать.
Апгрейд делается так же, как и первичная установка.
ещё раз спасибо!
пример:
Наверное, придется с этим смириться
может, конфликт с какими-то другими хуками?
Может, что-то недоустановилсь? Попробуй руками поставить модуль. В ридми описано, как это делается
А как собственно говоря какое-нибудь сообщение нативными методами ЛС вывести?
И да, почему-то в моем случае если вводить например двухбуквенный запрос выдается 302 Found и идет перенаправление опять на /mysearch/ и так далее пока браузер не скажет — хватит :) (два дня копаюсь не могу понять этого странного поведения)
Что же это?
Вот самые популярные запросы на моем сайте:
короче, создает очень приличную нагрузку на сервере. показатели резко увеличились. причем с 28 числа как только я установил этот поиск. вот CPU сегодня уже 1576.28 из 500! всегда было меньше 200.
Кол-во уников стабильно около 50 в сутки. даже когда на прошлой неделе (до установки mysearch) было по 300 в сутки такого не было.
В общем может параноя, но причиной вижу данный скрипт.
Как удалить mysearch?
2) А какая версия стоит? Если ниже 1.0.11, то рекомендовал бы прежде, чем удалять, ее поставить. Очень смущает, что число запросов /mysearch/ в 300 раз больше, чем favicon.ico. Есть впечатление, что много циклических редиректов, которые возникали при двухбуквенном запросе, которые были описаны выше, и которые устранены как раз в последней версии.
Выводится весь топик а под ним ссылка ката :)
57 /templates/skin/new/css/style.css
61 /templates/skin/new/images/footer-bg.gif
66 /
69 /templates/skin/new/css/prettify.css
30755 /mysearch/
было 15288, стало 30755 :) ничего не понимаю! (с)
а его то и нету!:) ищу через поиск ftp — нет его.
Лежать файл должен здесь: classes/hooks/HookMysearch.class.php
Кстати, на модерации сейчас новая версия:
А по поводу решения проблемы: я так понимаю, у тебя шаред-хостинг. А кусок серверных логов поддержка может дать? Очень хотелось бы глянуть, как, откуда, в каком порядке идут запросы к /mysearch/. Ведь если у тебя такая фигня, то у кого-то другого тоже может вылезти. Хотелось бы все же докопаться до причин.
попробую узнать про запросы.
Error occured during installation of module
Cannot copy file to /classes/actions/ActionMysearch.class.php
если залить файло ручками:
Error occured during installation of module
Cannot delete file /actions/ActionMysearch.class.php
Вот такие пироги :(
И если уже залил все ручками, то зачем инсталлятор запускать? Просто проверь и убедись, что все работает :)
Нагрузка вроде норм пока