Поиск по сайту
Мы считаем, что реализация полноценного поиска по сайту не входит в область ответственности CMS, поскольку это отдельная сложная задача, для решения которой существуют специализированные инструменты. Fenrir.CMS позволяет легко интегрировать на сайт внешние поисковые движки, и такой подход мы считаем самым правильным.
Яндекс.XML
Поиск - это основная компетенция Яндекса, и он отлично справляется со своей работой. Согласитесь, конкурировать с Яндексом на этом поле - задача не для разработчиков CMS :)
Использование Яндекс.XML позволяет создать сервис высочайшего качества, настроить отображение результатов и формы поиска в соответствии с требованиями дизайна. При этом разработчику (и пользователю) доступен мощный синтаксис поисковых запросов, что позволяет гибко управлять областью поиска: например, на портале Союза Потребителей России пользователи могут ограничить поиск сайтом или форумом.
Однако, поиск на Яндекс.XML имеет некоторые ограничения.
- Яндекс индексирует сайт не мгновенно, новые документы попадают в индекс с некоторой задержкой (в среднем - неделя)
- Нельзя реализовать поиск по закрытым данным (например, поиск по личным сообщениям)
- В сутки можно задавать до 1000 запросов (хватает для большинства проектов, при превышении лимита почти всегда можно решить проблему, присоединившись к рекламной сети Яндекса).
Sphinx
Sphinx - это бесплатный открытый поисковый движок с поддержкой морфологии русского языка. Sphinx позволяет индексировать данные из БД, поэтому не имеет ограничений для закрытых данных. Кроме того, индексация проекта происходит значительно быстрее.
Основной недостаток этого движка состоит в необходимости установки и конфигурации, что делает невозможным его использование на виртуальном хостинге. Однако, при нынешних ценах на VPS для серьезного проекта это не представляется проблемой.
Или все-таки свой?
В принципе, Fenrir.CMS вполне позволяет реализовать поиск самому, и для небольших редко обновляемых проектов такое решение может подойти.
Для реализации поиска необходимо:
- Создать типы данных "страница в индексе" и "элемент контента в индексе", элемент контента привязывается к странице.
- Создать класс-индексатор, способный преобразовывать типы данных проекта в соответствующие типы для индекса (для преобразования можно использовать систему правил). Из данных в индексе нужно удалить весь "мусор" - разметку, спец. символы и т.д.
- Создать обработчик системных событий создания / изменения / удаления, вызывающий методы индексатора.
- Реализовать несложный модуль для поиска по индексу (FULLTEXT или LIKE, it depends)
Именно таким способом реализован поиск по сайту завода Мценскпрокат - и он вполне справляется со своими задачами.


