MySearch - простой поиск без Sphinx'а

Возникла необходимость организовать поиск в ЛС без Сфинкса. Помню — пробегала здесь такая тема. Нашел. Но не устроило то, что установка его без хака не обходится. Плюс показалось, что запросы используются довольно тяжелые. Поэтому решил быстренько написать свой модуль.

Что он умеет:
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 символов возникал цикличный редирект

89 комментариев

avatar
Наградить в июле! Однозначно!

ps: спасибо за модуль
avatar
Благодарю за модуль!
Награду Герою!
avatar
А фич-реквесты принимаются?
  • Sky
  • 0
avatar
Да ты пиши, а там видно будет :)
avatar
Например поиск по пользователями комментариям, блогам, а не только по топикам?
avatar
По комментариям — понятно. Думаю, я это сделаю.
По юзерам — искать имя юзера?
И по блогам — искать по названию и описанию блога?
avatar
По юзерам — не только имя, но и например «О себе».
По блогам да в описании.
avatar
Да, сделать наконец поиск юзеров на странице «Люди»

По логину, имени, стране, «о себе»
avatar
Сделать в поле поиска выпадающую менюшку с выбором места поиска (топики, блоги, комментарии)

Или на странице результатов сделать вкладки соответствующие, а поиск пускай изначально везде ищет.
avatar
С вкладками удобнее и симпатичнее будет, думаю. Да и не нужно будет править сам шаблон (в случае с выпадающим меню).
avatar
Идея с выпадающей менюшкой мне нравится больше, но делать буду с вкладками :)
avatar
Ну вот так всегда… упор в сторону функциональности, нет чтоб покрасивше ))
avatar
Все просто: с вкладками и прочими красивостями — это хак, а я максимально стараюсь этого избегать.
avatar
Спасибо, устанавливается действительно легко и без гемора, но есть мелкий недочет — если в поисковом запросе присутствует хоть одна заглавная буква, возникает ошибка.
avatar
А какая ошибка?
avatar
Увидел, какая ошибка. Пока не понял, почему, но разберемся
avatar
А пагинация присутствует?
avatar
Отвечу так: подразумевается, т.е. должна быть, но на практике не проверял :)
avatar
Ну Авадим, ну молодца!!! Уже второй зачетный модуль!!!
avatar
У меня на странице с результатами вылазит вот такая ошибка:
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


Как исправить, подскажите, пожалуйста.
avatar
Пропиши в .htaccess php_value allow_call_time_pass_reference 1
avatar
Или подожди пару часов — исправлю
avatar
Подожду. Спасибо большое!
avatar
отлично! спасибо большое. буду пользоваться первое время))
  • F-5
  • 0
avatar
Шпа-си-бо! До сфинкса, которого на начало августа запланировал, с удовольствием попользуюсь))
avatar
+100
Молодец, а то подключал всё время гугль ^_^
avatar
не устанавливается, при переходе http://<ваш_сайт>/update/modules/ls_mysearch/install.php просто белый экран
avatar
Тогда читаем readme.txt из комплекта и ставим руками
avatar
спасибо, всё работает))
avatar
Ошибку пока не удалось устранить?
avatar
Пардон за задержку, скачивай последний билд 1.0.7
avatar
Что вы… Вам спасибо за работу и время!
Очень нужный модуль! Спасибо!
avatar
Всё, ошибка ушла, спасибо!
В результатах топики из черновиков преднамеренно показываются? Может не стоит их выводить?
avatar
А разве показываются? Не должны. Видимо упустил этот момент, исправлю
avatar
Да, показываются.
Спасибо за ваш труд!
avatar
1.0.8 — уже не выводятся :)
avatar
Оперативно :)
Спасибо!
avatar
Выложена версия 1.0.8 — исправлены ошибки и добавлена махонькая фича: теперь возможен поиск строгий и нестрогий (подробности здесь: livestreet.ru/blog/2228.html), а также из результатов поиска исключены черновики
avatar
А обновляться как?
Просто заново установить модуль?
avatar
Да.
avatar
Ну не любит наш народ читать readme
avatar
народ обещает исправиться )
avatar
Выложена версия 1.0.9 — теперь поиск и по комментариям.

Кстати, обнаружился «подводный камень», о котором необходимо знать: если вы на своем сайте организуете какие-то особые виды блогов с ограниченным доступом, то поиск это не будет учитывать. Поиск идет по всем опубликованным топикам, невзирая на вероятные особенности блога.
avatar
Спасибо!
avatar
Спасибо! Попробовал поиск в работе — по топикам находит отлично, не разобрался как включить поиск по коментариям…
avatar
не разобрался как включить поиск по коментариям…

В результатах поиска кликнуть по вкладке «Комментарии»
avatar
avadim, спасибо! а, вот я видел вкладки, но не подумал даже :) но у меня всеравно не работает — www.rashalaika.ru/ — поиском пытаюсь найти слово «надежное» (без кавычек, есть в коментарии в этом топике www.rashalaika.ru/blog/ekipirovka/8.html#comments) но в результате «Удивительно, но поиск не дал результатов»
avatar
На твоем сайте еще кое-какие баги вылезли.
Сейчас выложил версию 1.0.10, попробуй, как работает, и дай знать.
Апгрейд делается так же, как и первичная установка.
avatar
avadim, благодарю Вас! номера яндекс денег я разглядел в топике, намёк понял )
ещё раз спасибо!
avatar
Проверил сейчас — «надежное» все равно не находит. Но зато находит по шаблону «надежное*». Значит, система воспринимает многоточие, как часть слова, а не как его границу. Боюсь, «медицина тут бессильна» и я ничего сделать не смогу, потому что это уже «фича» от MySQL.
avatar
А если на сохранении/редактировании/создании автоматически три точки заменять на 3 точки с пробелом?
avatar
Если просто точка стоит, то должно правильно отрабатывать
avatar
бьет картинки в выдаче, если в тэге картинки искомое слово.
пример: поиск по слову Honda
avatar
Да, есть такая байда
avatar
Вот только решение этой проблемы — совсем непростая задача. Попробуйте на этом сайте задать в поиске import — результат будет любопытным :)

Наверное, придется с этим смириться
avatar
По вышесказаному — я имел ввиду результаты поиска по слову import в комментариях
avatar
у меня браузер пишет о бесконечной переадресации, что я делаю не так?
avatar
понятия не имею
может, конфликт с какими-то другими хуками?
avatar
да не стоят у меня хуки) а я правильно понимаю что эта форма поиска которая в стандартном шаблоне, будет обращаться теперь к новому модулю поиска?
avatar
Да, именно так. Но вот почему у тебя вечный редирект происходит — это непонятно.
Может, что-то недоустановилсь? Попробуй руками поставить модуль. В ридми описано, как это делается
avatar


		if (!func_check($sRequest, 'text', 2, 255)) {
			/**
			 *  Если запрос слишком короткий перенаправляем на начальную страницу поиска
			 * Хотя тут лучше показывать юзеру в чем он виноват
			 */
			func_header_location(DIR_WEB_ROOT.'/'.ROUTE_PAGE_MYSEARCH.'/');
		}


А как собственно говоря какое-нибудь сообщение нативными методами ЛС вывести?
И да, почему-то в моем случае если вводить например двухбуквенный запрос выдается 302 Found и идет перенаправление опять на /mysearch/ и так далее пока браузер не скажет — хватит :) (два дня копаюсь не могу понять этого странного поведения)
avatar
ой, там вместо двоечки — тройка в исходном коде
avatar
Ах, вот оно что! Двухбуквенный запрос! Я действительно минимальное число букв сделал 3, т.к. имхо 2 буквы в запросе — это совем не айс. Но, честно говоря, не проверял, как себя модуль ведет, если двухбуквенный запрос ввести. И, сдается мне, что не совсем корректно. Щас проверю
avatar
Выложена версия 1.0.11, в которой исправлен досадный баг: если запрос был меньше 3 символов, то возникал цикличный редирект. Рекомендуется обновиться всем, кто ставил этот модуль.
avatar
Спасибо большое! Более быстрых исправлений я еще нигде не видел!
avatar
Хелп!!! Перестал вообще поиск работать (http://www.avtoturistu.ru/search/topics/?q=%D1%82%D1%80%D0%B0%D1%81%D1%81%D0%B0), а на двухсимвольный ФФ по-прежнему пишет
Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.

Что же это?
avatar
Отбой… Заметил косяк с неправильно перекопированным файликом, сам исправил))
avatar
В американских инструкциях по пользованию бытовыми электроприборами в разделе «Возможные проблемы и их решение» первым пунктом всегда идет:
Симптом: прибор не работает
Решение: проверьте, включен ли прибор в электросеть
avatar
Да вот проверял-проверял — в упор не видел, что файлец ActionMysearch.class залудил не в classes/actions а просто в actions)
avatar
браво!
avatar
ALARM!=))

Вот самые популярные запросы на моем сайте:
51 /templates/skin/new/images/sidebar-tags-cr.gif
53 /templates/skin/new/images/footer-bg.gif
58 /templates/skin/new/images/favicon.ico
234 /
15288 /mysearch/


короче, создает очень приличную нагрузку на сервере. показатели резко увеличились. причем с 28 числа как только я установил этот поиск. вот CPU сегодня уже 1576.28 из 500! всегда было меньше 200.

Кол-во уников стабильно около 50 в сутки. даже когда на прошлой неделе (до установки mysearch) было по 300 в сутки такого не было.

В общем может параноя, но причиной вижу данный скрипт.
Как удалить mysearch?
  • F-5
  • 0
avatar
1) Для удаления модуля смотрим список файлов, входящих в его состав, и прибиваем их (автоматического «удалятора» нет). Для экстренного удаления, думаю, достаточно будет удалить HookMysearch.class.php из папки с хуками (тогда не будет перенаправления на mysearch

2) А какая версия стоит? Если ниже 1.0.11, то рекомендовал бы прежде, чем удалять, ее поставить. Очень смущает, что число запросов /mysearch/ в 300 раз больше, чем favicon.ico. Есть впечатление, что много циклических редиректов, которые возникали при двухбуквенном запросе, которые были описаны выше, и которые устранены как раз в последней версии.
avatar
да, версия ниже. попробую обновить.
avatar
хм, после обновления поиск выводит все топики целиком без учета
avatar
cut
avatar
+1 такая же фигня.
Выводится весь топик а под ним ссылка ката :)
avatar
Мда, есть такая трабла. Тут вообще-то сниппеты надо делать, а не просто текст выводить.
avatar
Это мы подлечим. А с нагрузкой как стало?
avatar
55 /templates/skin/new/images/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 :) ничего не понимаю! (с)
avatar
«Не пытайся согнуть ложку. Это невозможно. Просто попытайся понять истину. Какую? Нет никакой ложки.» ©
avatar
захотел вот удалить HookMysearch.class.php
а его то и нету!:) ищу через поиск ftp — нет его.
avatar
Ну тогда ваще ничо не понимаю!

Лежать файл должен здесь: classes/hooks/HookMysearch.class.php

Кстати, на модерации сейчас новая версия: livestreet.ru/blog/2260.html Там можно отключать модуль, не удаляя его.

А по поводу решения проблемы: я так понимаю, у тебя шаред-хостинг. А кусок серверных логов поддержка может дать? Очень хотелось бы глянуть, как, откуда, в каком порядке идут запросы к /mysearch/. Ведь если у тебя такая фигня, то у кого-то другого тоже может вылезти. Хотелось бы все же докопаться до причин.
avatar
нашел файл. спасибо:) хостинг hc.ru
попробую узнать про запросы.
avatar
Хотя, отключить совсем модуль не получится, если идет прямое обращение к /mysearch/, то оно будет отрабатываться. Выключить можно только редирект с /search/ на /mysearch/.
avatar
Пробывал автоматом установить.

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

Вот такие пироги :(
avatar
Ошибка такая, скорее всего, из-за того, что недостаточно прав на удаление/копирование файлов в папке из скрипта. Решается либо установкой необходимых прав и повторным запуском инсталлятора, либо заливкой ручками.

И если уже залил все ручками, то зачем инсталлятор запускать? Просто проверь и убедись, что все работает :)
avatar
та я уже установил просто изначально в папке шаблонов неаправильно папка со скином названа :)

Нагрузка вроде норм пока
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.