Блог/Поиск по сайту

Полноценный поиск на Modx Evolution

Автор: Кудашев Сергей

На протяжении многих лет для поиска по сайтам с установленной Modx пользовался доработанной под себя версией сниппета HyperFlexSearchForm. Шло время, поиск исправно работал, и всех все устраивало, пока на одном из посещаемых проектов не был установлен и настроен счетчик Google Analytics. Практически сразу аналитика показала, что поиск является явным узким местом сайта. Через месяц, после накопления статистики, стало видно, что порядка 80% пользователей уходят с поиска не получив нужной им информации. И тогда возник вопрос, как сделать полноценный поиск по сайту на Modx?

Так как проект работал на Modx Evolution, то особого выбора сниппетов для организации поиска на сайте не было. Альтернатив сниппету AjaxSearch в Evolution практически нет, но для того, чтобы получить от него максимум, я решил разобраться с настройками, как оказалось не зря. Мною были поставлены следующие требования к сниппету: мне нужен был простой поиск без ajax наворотов, мне нужно было повысить релевантность поиска, чтобы он выдавал более адекватные результаты, которые бы нравились, плюс мне было бы интересно видеть, что именно ищут пользователи, не лазить же каждый раз в Analytics.

Как оказалось AjaxSearch легко отвечает всем моим требованиям, и дает даже чуть больше того, что от него требовалось. Для вызова сниппета на странице поиска использовалась следующая конструкция:

[!AjaxSearch? &landingPage=`1179` &showMoreResults=`1` &moreResultsPage=`1179` &ajaxSearch=`0` &advSearch=`allwords` &asLog=`1:0:500`!]

, здесь мы видим, что поиск располагается в документе с id 1179 (&landingPage=`1179`), что сниппет не использует AJAX функционал ( &ajaxSearch=`0`), что для поиска используется метод поиска по всем словам в документе (&advSearch=`allwords`) и сниппетом осуществляется логирование (&asLog=`1:0:500`).

На двух последних свойствах вызова хотел бы остановиться поподробнее.

Свойство &advSearch задает внутренний алгоритм поиска и может принимать четыре значения, от которых будут зависеть результаты поиска. Как показали эксперименты, результаты могут отличаться координально. Возможные параметры поиска:

exactphrase – в результатах поиска будут отражены документы содержащие точное вхождение поискового запроса
allwords – в результатах поиска будут отражены документы содержащие любое из слов из поискового запроса
nowords – в результатах поиска будут отражены документы не содержащие поискового запроса
oneword – в результатах поиска будут отражены документы содержащие хотя бы одно из слов из поискового запроса

Проведя ряд экспериментов мною был выбран второй вариант, который давал наиболее релевантные результаты. Единственный момент, который следует отметить - вариант allwords, как и вариант oneword, достаточно ресурсозатратные, поэтому следует внимательно следить за нагрузкой на хостинг.

Свойство &asLog указывает на то, что поисковые запросы и статистика по полученным результатам должны логироваться. Логирование осуществляется в отдельную таблицу в базе данных, которая создается в момент установки модуля AjaxSearch Logs Manager, который необходимо установить, чтобы можно было смотреть результаты логирования (сам модуль входит в стандартный пакет AjaxSearch, искать его отдельно не надо). Описывать процесс установки модуля не буду, все просто и стандартно. После установки модуля AjaxSearch Logs Manager в разделе Modules (Модули) появится вкладка AjaxSearch, в которой можно будет получить подробную информацию о том, что именно и как люди искали на вашем сайте.

На последок хотел бы отметить, что несмотря на наличие модуля логирования рекомендуется настроить счетчик Google Analytics на сбор информации о поиске по сайту. Этот шаг даст возможность увидеть, если что-то пойдет не так, а так же позволит оценить уровень удовлетворенности посетителей поиском и попробовать его улучшить, при необходимости.

Комментарии (2)

  1. Сергей07 ноября 2015, 03:50#
    А чем обычный поиск не устраивает? Чем он не полноценен?
    1. Кудашев Сергей08 ноября 2015, 13:29#
      Вроде написал в статье, что доработанный под себя поиск на основе HyperFlexSearchForm находил информацию плохо. В ходе тестов оказалось, что дефолтовый AjaxSearch выдает более релевантные результаты поиска.

      В общем мой косяк, который был исправлен :)