Поиск по сайту.

Lasto's Abductor, Похититель буковок Lasto's Abductor, Похититель буковок

Проблематика CMS на текстовых файлах:

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

Правда, с организацией поиска по сайту могут быть проблемы. Движки на текстовых файлах совсем не подходят для организации поиска силами PHP. Перелопатить сотни (а то и тысячи) статей, попутно ранжируя их, за вменяемое время вряд ли удастся.

Попутно получится неадекватная нагрузка как на дисковую подсистему хостера, так и на процессор (не говоря про повышенные требования к оперативке) - хостер явно будет не шибко счастлив. И непременно начнёт выражать своё неудовольствие.

А нам же нужно, чтобы на одном аккаунте спокойно работал хотя бы десяток сайтов на базе Abductor-а, верно? Да ещё и с приемлемым временем отклика.

Потому придётся громоздить какой-нибудь многовложенный сложный индекс, очень сильно при этом извращаясь при его построении и обновлении. Это явно не наш путь.

Альтернатива.

Мы так же знаем, что на любой сайт можно повесить поиск от Яндекса или Гугла, причём разных версий. Но это тоже нам не сильно подойдёт.

Потому что всё, что использует при своей работе JavaScript, во-первых, никак не индексируется, а во-вторых, работает без гарантии. То в браузере пользователя нет поддержки Джавы, то его файервол или антивирус заблокируют какой-нибудь кусочек аякса по сигнатуре или фрагменту URL-а, то приключится ещё какая-нибудь малопонятная ерунда с закономерным результатом - "а у вас поиск не работает".

Ну и даже если всё работает, стандартная выдача поисковика весьма ущербна - сниппет с выдранной фразой из статьи на самом деле мало кому что толкового может сказать. По этой причине никто помногу и с удовольствием не пользуется поиском по сайту от Яндекса или Гугла.

Поэтому этот вариант нас тоже не удовлетворит.

Наш вариант поиска по сайту:

Поскольку скрипт Abductor-а профессионально занимается парсингом чего угодно, было бы разумно этим и воспользоваться. Примерно в таком плане:

  1. Мы получаем от пользователя своего сайта запрос.

  2. С этим запросом идём в Гугл (или иной поисковик), и осуществляем поиск по нашему запросу в пределах своего сайта.

  3. С выдачи забираем список документов.
    Изымая из списка то, что не является постами.
    Потому что только URL-ы постов содержат стабильный контент.

  4. Для каждой статьи, признанной поисковиком релевантной поисковому запросу, составляем сниппет - тайтл, отмасштабированная картинка из тела статьи, штуки три фразы с кейвордами. Ключевые слова давайте выделять стронгами, чтобы пользователь сразу видел их, причём в контексте.

    Ограничение в три предложения на сниппет призвано не переборщить с тошнотностью текста.

  5. Получившийся документ результатов поиска по сайту помещаем в шаблон сайта, и отдаём серферу. Пусть смотрит, про что он хочет почитать, и переходит к соответствующей статье.

  6. Этот документ также кэшируем суток на пять.
    Запросы пользователей, как правило, однотипны.
    Незачем спрашивать у поисковой системы постоянно про одно и то же.

Для того, чтобы администратор ресурса мог внести любые изменения в алгоритм или выдачу сервиса поиска по сайту, по-своему сформировать сниппет, поменять базовую поисковую систему, и т.п, скрипт поиска ему доступен в открытом виде по пути ./data/pages/search.php - именно там и проявляйте всё своё любопытство. Комментарии, облегчающие понимание кода, в нём имеются.

Oбратите внимание, что скрипт поиска может принять запрос не только через форму, но и через свой URL. Что необходимо для организации такой затейливости, как государство Белых Дорвейчиков - читайте об этом далее в меню.

Обязательное условие.

Единственное безусловное требование - сайт должен быть проиндексирован используемой поисковой системой.

Понимая, что через встроенный поиск сайта, устроенный вышеуказанным образом, найдётся только то, что проиндексировано поисковой системой, используйте ту из них, в индексе которой Ваш сайт представлен наиболее полно.

Понятное дело, поиск через Гугл и Яндекс даст разный результат.
Тут места удивлению быть не должно.

Дискламбер.

Отказ поисковой системы обслуживать запросы Вашего сайта по всё равно какой причине, не является поводом для предъявления каких-либо претензий разработчику. Используйте кэширование на длительный срок, а также домен в собственном айпишнике, если соседи по айпишнику запинговывают поисковик насмерть.