Вы прочли и применили предыдущую статью на практике? Отлично! Значит прямо сейчас вы сможете добавить функцию поиска на свой сайт :-)
Для начала необходимо скачать дистрибутив модуля и распаковать полученный архив в корень движка с учетом путей файлов. [update: архив перезалит — версия 2.1, описание — в комментарии]
Итак, основная часть работы уже сделана, осталось совсем чуть-чуть:
1. в настройки маршрутизатора движка (config/config.route.php) нужно добавить описание класса-обработчика экшена search, для этого добавьте в секцию 'page' код:
'search' => 'ActionSearch',
2. Для более красивого вывода результатов поиска (разумеется, вид поисковой выдачи вы можете настроить по желанию, в этом случае имейте в виду, что в сниппетах ключевые слова оборачиваются в контейнер с CSS-классом searched-item) в главный CSS-файл сайта (global.css) добавьте следующее:
чтобы добавить посковую форму на все страницы, достаточно в шаблон header вставить код формы с обработчиком /search/topics, либо /search/comments (в зависимости от того какой тип объектов вы хотите искать по-умолчанию) и обязательным полем с именем q — текст запроса.
лучше его потестировать всякими заковыристыми запросами (несколько слов и тп) побольше.
в процессе тестирования оказалось, что при запросах, состоящих из русских и не_русских слов иногда всякие неожиданности находятся при включенной морфологии :)
Скачайте бинарную сборку Сфинкса для винды sphinx-0.9.8.1-win32.zip с оф. сайта, а затем по статье (<a href=«http://livestreet.ru/blog/dev_documentation/366.html»линк) с адаптацией по винду.
Аргументы вызова сфинксовых бинарников у *nix и win версий совпадают, только пути в конфиге, возможно, придется поменять.
Я так понял нужно иметь рутовый доступ к серверу, чтобы установить приложение сфинкс, а это могут позволить себе только на VDS/VPS или на собственном сервере. А что делать остальным, у которых сайты на обычном виртуальном хостинге? Просить саппорт хостинга установить сфинкс или как? Я не думаю, что хостеры будут выполнять такие просьбы пользователей, хотя может и сделают. Еще такой вопрос, этот сфинкс достаточно установить на основном хостинге и все или для всех виртуальных хостов тоже что нибудь надо настраивать?
отлично, отлично ищет.
пожелания
1) чтобы форма поиска была на каждой странице или во всплывающем окне (по типу загрузки картинок)
2) там сложно сделать подсветку искомого слова? а то нечитабельно
так фразы не ищет, с морфологией одного слова тоже какието проблемы бывают, беру любой топик, выбираю заковыристое слово в топике или комментарии — не находит… а то и ошибку «какието проблемы» выдает.
вообщем, найдено уже несколько багов. буду исправлять.
выдаваемые результаты поиска от модуля не зависят — все делает сам сфинкс, просто надо лучше поиграться с настройками его морфологического движка, чем я и займусь.
Изменения в модуле:
0. Добавлен функционал — если объектов требуемого типа не найдено, но найдены другие — выводится «то, что есть»
1. Пофиксен вывод количества найденных объектов (был «баг» — в случае Черновика, топик считался, но не выводился. с комментарием аналогично)
2. Выдача сообщений не найдено/ошибка. Теперь пишется то, что на самом деле имеет место быть :)
3. Мелкие исправления — передача в API движка лишних параметров и пробел в конце файла с экшеном.
Изменения в конфигурации Сфинкса:
1. Добавлено полное удаление тегов (вместе с содержимым) style и script при индексаци.
Найдите в своей конфигурации строку «html_strip = 1» и сразу после нее вставьте «html_remove_elements = style, script». Данный параметр встречается в конфигурации не менее двух раз.
2. Исправлен тип атрибутов topic_publish и comment_delete при их интерпретации Сфинксом.
Строку «sql_attr_bool = topic_publish» замените на «sql_attr_uint = topic_publish» и «sql_attr_bool = comment_delete» на «sql_attr_uint = comment_delete»
3. Настройка морфологии немного изменена.
Найдите все вхождения строки «morphology = stem_enru, soundex, metaphone» (встречается минимум дважды) и замените на «morphology = stem_enru»
Исключенные два морфо-движка (soundex, metaphone) генерируют из строки код на основе звучания каждого слова, что позволяет, например, находить документы с орфографическими ошибками в словах, однако такой функционал иногда работает не верно, что может привести к неожиданным и неверным результатам.
Очередное нано-исправление: при указании страницы (руками) больше, чем всего найдено сыпались ошибки.
Скачать v.2.01 — SphinxSearch.Module.v2.01.zip
Из архива достаточно переписать файл ActionSearch.class.php
на самом деле, можно безболезненно накатить изменения из 82коммита, т.к. это первое изменение после среза версии 0.2 и в нем ничего, кроме добавленных пары модулей этих и слегка подгрученного вьюера не изменилось по сравнению с 0.2 (в том числе БД и прочее)
интересную особенность обнаружил, если ввести в строку адреса (http://_____.ru/comments/) то открывается отдельная страница с прямым эфиром в стиле результатов поиска. ))))
ковырял ковырял… натворил делов, но все заработало УРА, я имею ввиду поиск,
но теперь появилась казявка
вверху — Notice: Use of undefined constant SITE_KEYWORDS — assumed 'SITE_KEYWORDS' in /home/www/myblog2/classes/engine/Engine.class.php on line 97
а коммиты из сабвершена надо накатывать с умом :) периодически там появляются новые конфигурационные контанты, которые надо внести в существующие конфиги.
SITE_KEYWORDS и еще одна какая-то, насколько я помню, как раз были добавлены в одном из коммитов.
51 комментарий
кстати, ты не забыл в архив сфинксапи положить?
перезалил, топик обновил
в процессе тестирования оказалось, что при запросах, состоящих из русских и не_русских слов иногда всякие неожиданности находятся при включенной морфологии :)
Аргументы вызова сфинксовых бинарников у *nix и win версий совпадают, только пути в конфиге, возможно, придется поменять.
пожелания
1) чтобы форма поиска была на каждой странице или во всплывающем окне (по типу загрузки картинок)
2) там сложно сделать подсветку искомого слова? а то нечитабельно
выдавание ошибки — не ошибка, а не совсем правильное детектирование отсутствия результатов, поправлю.
выдаваемые результаты поиска от модуля не зависят — все делает сам сфинкс, просто надо лучше поиграться с настройками его морфологического движка, чем я и займусь.
Изменения в модуле:
0. Добавлен функционал — если объектов требуемого типа не найдено, но найдены другие — выводится «то, что есть»
1. Пофиксен вывод количества найденных объектов (был «баг» — в случае Черновика, топик считался, но не выводился. с комментарием аналогично)
2. Выдача сообщений не найдено/ошибка. Теперь пишется то, что на самом деле имеет место быть :)
3. Мелкие исправления — передача в API движка лишних параметров и пробел в конце файла с экшеном.
Изменения в конфигурации Сфинкса:
1. Добавлено полное удаление тегов (вместе с содержимым) style и script при индексаци.
Найдите в своей конфигурации строку «html_strip = 1» и сразу после нее вставьте «html_remove_elements = style, script». Данный параметр встречается в конфигурации не менее двух раз.
2. Исправлен тип атрибутов topic_publish и comment_delete при их интерпретации Сфинксом.
Строку «sql_attr_bool = topic_publish» замените на «sql_attr_uint = topic_publish» и «sql_attr_bool = comment_delete» на «sql_attr_uint = comment_delete»
3. Настройка морфологии немного изменена.
Найдите все вхождения строки «morphology = stem_enru, soundex, metaphone» (встречается минимум дважды) и замените на «morphology = stem_enru»
Исключенные два морфо-движка (soundex, metaphone) генерируют из строки код на основе звучания каждого слова, что позволяет, например, находить документы с орфографическими ошибками в словах, однако такой функционал иногда работает не верно, что может привести к неожиданным и неверным результатам.
PS: архив с модулем перезалит на
html_strip = 1
встречается только 1 раз у топиков
немного
Скачать v.2.01 —
Из архива достаточно переписать файл ActionSearch.class.php
Такой метод (и аналогичный для комментариев) появился в
Подскажите.
Искать ищет, только по адресу ((http://___.ru/search/topics/?q=они), а вот по этому ошибка (http://___.ru/search/topics/?q=они)
Fatal error: Uncaught exception 'Exception' with message 'Не найден класс модуля — GetTopicsByArrayId' in /home/www/myblog2/classes/engine/Engine.class.php:95 Stack trace: #0 /home/www/myblog2/classes/engine/Engine.class.php(140): Engine->LoadModule('GetTopicsByArra...', true) #1 /home/www/myblog2/classes/engine/Module.class.php(37): Engine->_CallModule('GetTopicsByArra...', Array) #2 [internal function]: Module->__call('GetTopicsByArra...', Array) #3 /home/www/myblog2/classes/engine/Engine.class.php(144): eval()'d code(1): Topic->GetTopicsByArrayId(Array, NULL, -1) #4 /home/www/myblog2/classes/engine/Engine.class.php(144): eval() #5 /home/www/myblog2/classes/engine/Action.class.php(268): Engine->_CallModule('Topic_GetTopics...', Array) #6 [internal function]: Action->__call('Topic_GetTopics...', Array) #7 /home/www/myblog2/classes/actions/ActionSearch.class.php(37): ActionSearch->Topic_GetTopicsByArrayId(Array, NULL, -1) #8 /home/www/myblog2/classes/engine/Action.class.php(103): eval()'d code(1): Act in /home/www/myblog2/classes/engine/Engine.class.php on line 95
(Искать ищет, только по адресу ((http://___.ru/search/comments/?q=они), а вот по этому ошибка (http://___.ru/search/topics/?q=они))
а по поводу ошибки поика по комментариям, у тебя какая версия ядра ЖУ?
если имел в виду 0.2, то все понятно — метод GetTopicsByArrayId у объекта Topic появился только в коммите №82.
его тебе и нужно накатить (см. ветку комментариев от
но теперь появилась казявка
вверху — Notice: Use of undefined constant SITE_KEYWORDS — assumed 'SITE_KEYWORDS' in /home/www/myblog2/classes/engine/Engine.class.php on line 97
SITE_KEYWORDS и еще одна какая-то, насколько я помню, как раз были добавлены в одном из коммитов.
в консоли поиск работает и везде ищет
а вот на сайте происходит поиск только по комментам
в логах: