S2Расширения → Поиск (s2_search)

Поиск (s2_search)

Это расширение добавляет поиск на страницы сайта.

Принцип работы

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

При создании, редактировании или удалении одной страницы изменения автоматически попадают в индекс расширения s2_search. Любые другие существенные изменения сайта, например, изменение URL или удаление разделов, содержащих несколько страниц, в индекс не попадают. Перестройка индекса в этих случаях может быть длительной, и переиндексацию нужно запускать вручную (ссылка на первом скриншоте ниже).

Вообще, переиндексация никогда не повредит. Ее нужно выполнить в первую очередь при возникновении каких-либо проблем с поиском.

Результаты поиска сортируются по релевантности — степени соответствия страниц запросам. При поиске используется не только заголовок и текст страниц, но и содержимое мета-тега keywords. Вес заголовка и ключевых слов выше веса слов основного текста. Это сделано для «ручного» исправления несовершенства алгоритма расчета релевантности. Я не стал разделять ключевые слова внутреннего поиска и мета-тег keywords, основываясь на простой логике: поведение поисковиков вроде Яндекса не должно отличаться от поведения внутреннего поиска.

Это расширение основано на сделанном мной механизме поиска на сайте правил русского языка.

Установка

Расширение s2_search устанавливается как обычно.

После установки нужно создать поисковый индекс (ссылка на скриншоте ниже).

Панель управления

На вкладке статистики появляется ссылка для переиндексации.

На вкладке настройки можно включить «быстрый поиск» по заголовкам, который будет выдавать подсказки, пока пользователь набирает поисковую фразу.

Результаты поиска

Для вывода результатов поиска используется шаблон service.php.

«Быстрый поиск» в действии.

Системные требования и ограничения

Текущая версия предназначена для небольших сайтов. В ней поисковый индекс хранится в файле и должен целиком загружаться в память. Как показывают эксперименты, количество расходуемой оперативной памяти во время создания индекса примерно в 7-8 раз превосходит размер файла с индексом.

Таким образом, основное ограничение в текущей версии — количество памяти, доступной php-скриптам. Оно задается в файле настройки php.ini в параметре memory_limit и обычно составляет 16 или 32 мегабайта.

Например, на моем сайте written.ru размер файла с индексом чуть больше полутора мегабайт. Это значит, что количество используемой памяти укладывается в 16 мегабайт.

Дополнительные метки

Расширение s2_search определяет новую метку <!-- s2_search_field -->. Вместо нее подставляется HTML-код формы поиска.

Изменение HTML-разметки формы поиска

Вы можете прописать в шаблонах произвольный HTML-код формы поиска, а не использовать метку <!-- s2_search_field -->, если стандартная разметка вас не устраивает. Форме нужно установить атрибут action="<?php echo S2_BASE_URL; ?>/search", а полю ввода атрибут name="q".

Чтобы подключить «быстрый поиск», нужно прописать полю ввода id="s2_search_input". Дополнительная настройка положения и ширины блока с результатами осуществляется через атрибут поля ввода data-s2_search-pos="-5, 2, 10": в этом примере блок смещен на 5 пикселей влево и 2 пикселя вниз, его ширина увеличена на 10 пикселей.