У любого современного сайта, на котором присутствуют более 5 – 10 страниц с контентом, должна быть поисковая система. Как бы хорошо мы не планировали навигационную панель, или каталог товаров/разделов сайта, все равно любые наши попытки интуитивно-понятной систематизации, в конечном итоге, будут непонятны 101-му пользователю сайта.
Хотите убедиться что это так? Вот несколько простых задач, попробуйте потратить на их решение несколько минут (все примеры взяты абсолютно случайно из списка лично мне знакомых и посещаемых мною сайтов. Эти примеры ни в коем случае не призваны приуменьшить качество этих ресурсов):
Следует ли продолжать? Думаю, вы уже согласны со мной. И точно также рассуждают разработчики сайтов, когда перед ними встает проблема создание поисковой системы. К сожалению, большинство разработчиков недооценивают сложность этого решения и полагают, что поиск можно свести (упрощенно) к SQL запросу:
SELECT * FROM products WHERE
title LIKE ‘%что-то%’
OR description LIKE ‘%что-то%’
Так-то оно может быть и так, только вот ценность такого поиска будет нулевая. Можно, конечно же, усложнить, добавить поиск по словам и их сочетаниям (меня так умиляет фраза, которую иногда встречаешь на сайтах: «Вы можете использовать AND, OR, NOT». Ага! Вы еще пользователю булеву алгебру объясните). Но проблема такого поиска заключается в том, что разработчик полагает, что пользователь будет вводить названия продуктов или заголовки новостей точно так же, как они указаны на сайте, а пользователь вводит просто то, что ему сейчас нужно, совершенно в произвольной форме, и к тому же, он, пользователь, как правило, вводит короткие запросы,состоящие из одного-двух слов. То есть пользователь ищет курсы по SharePoint 2007, он так и напишет «SharePoint 2007», а не «Windows SharePoint Services v3». И в результате мы получаем абсолютно неработающую поисковую систему, потому что подобный поиск или вывалит сотни ссылок в качестве результата, и найти что-то в результате поиска будет невозможным, или не выдаст ничего. Хотите убедиться? Возьмем два мощных ресурса с большими бюджетами на разработку и попробуем протестировать поиск на них:
Легко заменить, что оба раза вы получили негативный результат. В первом случае вы не получили ничего, во втором – совершенно ненужную информацию (как вам понравилась ссылка на баннер про ипотеку?). Заметьте, оба раза неудачный поиск может заставить уйти клиента навсегда: я не стану переходить на MCT, так как там нет кредитной формы оплаты разговоров (на самом деле – есть!), и я не стану обращаться в Альфа-банк, так как не смог найти условий ипотечного кредитования (еще раз – это только примеры! Ничего личного!).
Как решить эту задачу?
Во-первых, необходимо осознать, что хороший поиск – это далеко нетривиальная задача. Более того, можно сказать и так: сложность реализации хорошего поиска намного превосходит сложность реализации функционала всего сайта. Поэтому нужно сто раз подумать, прежде чем ставить перед собой такую задачу. Вы готовы взяться написать систему морфологического анализа, оценки релевантности документов, алгоритм ранжирования результатов? И самое главное, сколько человеко-часов и тысяч строк кода вы готовы положить на это?
Но мы, тем не менее, можем решить эту задачу! У нас есть, как минимум, три способа ее решения:
Все эти способы отличаются от себя по трудозатратам, стоимости и получаемому результату, но все три способа дают на порядок более качественный результат, нежели приведенные выше примеры.
Это самый дешевый и легко реализуемый способ. Вместо того чтобы писать свой сырой и некачественный код поиска, вы просто встраиваете форму на страницы своего сайта, которая передает запрос поисковой системе. В качестве такой системы мы покажем использование Google, хотя можно использовать любую другую, например, вот формы Яндекса: http://company.yandex.ru/forms/. Но мне больше нравится Google, так как, на мой взгляд, качество поиска у него намного выше, чем у других поисковиков.
Итак, рисуем примерно такую форму:
<form method="get" action="http://www.google.com/search">
<input type="hidden" name="ie"
value="windows-1251" />
<input type="hidden" name="domains"
value="www.specialist.ru" />
<input type="hidden" name="sitesearch"
value="www.specialist.ru" />
<input id="searchBarInput" type="text" name="q"
value="" />
<input id="searchBarSubmit" type="submit"
value="Искать!" />
<div>
<a id="extendedSearchLink" href="http://google.com/">
<span>Powered by <span style="color:blue">G</span>
<span style="color:red">o</span>
<span style="color:olive">o</span>
<span style="color:blue">g</span>
<span style="color:green">l</span>
<span style="color:red">e</span></span></a>
</div>
</form>
Обратите внимание, указание на то, что поиск предоставлен поисковой системой Google обязательно! Вот и все! За счет скрытых полей мы просим Google искать только на указанном сайте. Причем качество поиска будет заведомо выше, чем в приведенных примерах. Давайте убедимся:
Первая же ссылка указывает на оформление кредитной формы оплаты на сайте МТС.
Пример с Альфа-банком:
Первый же результат – вся информация об ипотеке Альфа-банка!
Конечно же, при всей простоте этого способа, сразу же в глаза бросается и его недостаток: пользователь переходит с вашего сайта на поисковую систему. Вообще-то, само по себе это не так страшно, ведь все ссылки с поисковика обратно ведут к вам и только к вам, но вот контекстная реклама. Не думаю, что Альфа-банк согласится с подобным предложением использовать похожую схему. 🙂
Тем не менее, этот способ можно настоятельно рекомендовать малобюджетным или некоммерческим сайтам, так как качество поиска намного перевешивает негативные стороны в виде контекстной рекламы.
В этом способе мы попробуем отказаться от вывода чужих рекламных объявлений в результатах поиска. Многие поисковые системы предоставляют сервисы для осуществления автоматического поиска. Это и Яндекс.XML (http://xml.yandex.ru/), и службы Google и другие. Общий смысл заключается в том, что мы предоставляем свою форму поиска, которая передает запрос пользователя на наш сервер, который в свою очередь передает его поисковой системе. Получив результаты, наш сервер выводит их в любом дизайне, в любом виде на наш сайт. Пользователь даже не догадывается, что поиск осуществлялся какой-то внешней системой, так как он видит результаты в дизайне нашего сайта. Правда, у Яндекс.XML какая-то совершенно непонятная лицензионная система (требование параллельно выводить объявления Директа), а Google тихой сапой прикрыл подобный сервис примерно год назад, и сейчас предоставляет такой поиск только в совокупности с объявлениями AdSense, опять же, с контекстной рекламой.
Но и здесь можно найти выход. У Microsoft есть API для работы с поиском Live.com (http://dev.live.com/livesearch/), который (API – это «он»), позволяет реализовать подобную систему. Правда и этот API ограничивает количество запросов в день примерно на 1000 – 3000 запросов, но для средних сайтов этого хватает.
Реализовать такой поиск совершенно несложно, тем более Live Search API предусматривает SOAP вызовы XML Веб-сервиса, а это значит, что эти вызовы можно осуществить из любой платформы, и из любого средства разработки сайтов: PHP, ASP.Net и т.п.
Некоторое время назад мы сделали реализацию такого поиска, когда возникла необходимость создания поиска для сайта Specialit.ru. Увидеть ее в действии можно по адресу: http://search.specialist.ru
Если Вам покажется интересной эта тематика, оставьте, пожалуйста, свои отзывы и пожелания в комментариях к публикации, и в своей следующей статье я приведу подробный пример код реализации поисковой системы на базе Live Search API. Поверьте, там все намного проще, чем кажется на первый взгляд. 🙂
Однако, у способа, использующего доступные Веб-службы, например Live Search API, есть два ощутимых недостатка:
Первый недостаток обусловлен тем, что роботы поисковых систем сами устанавливают расписание обновления вашего сайта в индексе, и если, например, ваш сайт не отдает корректный заголовок ответа HTTP Last-Modified (а это болезнь 90% сайтов в Интернете!), то это время может быть значительным. То есть после появления новых материалов на вашем сайте могут пройти дни, а то и недели, прежде чем они появятся в результатах поиска.
Второй недостаток вообще фатален. Робот поисковика никак не сможет получить доступ в закрытые разделы вашего сайта (например, в закрытый форум, где требуется авторизация), и поэтому информация из закрытых разделов никогда не появится в результатах поиска. Можно, конечно же, извернуться и сделать обезличенную публикацию информации из закрытых разделов (например, выводить сообщения закрытого форму без информации о пользователях), но это пройдет далеко не всегда. Например, как быть с поиском в вашей корпоративной почте?
Здесь нам могут помочь сторонние поисковые системы, например, Яндекс.Сервер (http://company.yandex.ru/technology/products/yandex-server.xml) или корпоративный Microsoft Office SharePoint Server (http://office.microsoft.com/ru-ru/sharepointserver/FX100492001049.aspx). Второй мне известен куда лучше, чем сервер от Яндекса, и он обладает достаточно мощной поисковой системой, которую можно использовать, в том числе, и для поиска по вашему сайту.