Яндекс для всех — страница 32 из 37

1. Алиев Т. А., Заболотская Т. А. Практическое руководство для студентов, магистрантов и аспирантов: http://www.phys.spbu.ru/Library/Method/AcademWork/index.html.

2. Красносельский К. К. Советы специалистов поисковой системы Яндекс: http://webdesign.site3k.net/conjuncture/append/a/yandex4.html.

3. Лицензия на использование поисковой системы Яндекса: http://rules.yandex.ru/termsofuse.xml.

4. Ранжирование документов в поисковых машинах: http://internet-busines.org.ua/raskrutka-articles/raskrutka-61.htm.

5. Что такое пессимизация, что такое "бан"? Признаки, порядок действия: http://www.seonews.ru/masterclass/9/34/

6. Chris Ridings. Растолкованный PageRank: http://www.searchenginesystems.net.

7. PageRank Calculator: http://www.webworkshop.net/.

8. Rand Fishkin. Факторы, влияющие на ранкинг в поисковой системе: http://www.master-x.com/articles/printmode.html?id=270.


Евгений Ломизе — руководитель отдела рекламных технологий компании "Яндекс".

Евгений родился 3 марта 1962 года в Москве. Закончил исторический факультет МГУ в 1987 году, получив специальность историка-преподавателя с правом преподавания на иностранном языке.

После окончания университета пять лет преподавал в Институте славяноведения и балканистики РАН и вел активную научную деятельность — автор более 20 публикаций по истории Византии.

В 1992–1995 годах — московский представитель научного издательства "Мелисса" в Нью-Йорке, организовывал переводы научных статей и монографий по византинистике и славистике и подготовку их к публикации.

В период с 1997 по 2000 год — в должности заместителя директора по работе с иностранными клиентами в компании ООО "Артстоун" продолжал заниматься переводами.

С 2000 года — менеджер проектов компании "Яндекс".

Под руководством Евгения Ломизе были запущены популярные сервисы Яндекса — Каталог, Энциклопедии, Яндекс. Лингво, РРС-версия Директа, Рекламная сеть.

Глава 10Владельцам сайтов

10.1. Яndex.Server для вашего сайта

Поиск в Интернете с помощью Яндекса или иного поисковика, безусловно, хорош. И находит много, и работает быстро. Но зачастую проблема заключается не в том, чтобы искать по всему, допустим, Рунету, а в том, чтобы найти необходимую информацию на одном-единственном сайте. Если сайт невелик, то проблема поиска информации на нем сложностей не представляет — вполне можно пролистать страницы и отыскать необходимое. Но если сайт "разрастается", а информация на нем пополняется часто, появляется потребность реализовать поиск в рамках этого отдельно взятого проекта.

Надо сказать, что существует множество вариантов организации такого поиска, включая и собственные разработки, и бесплатные скрипты. Яндекс предлагает для решения подобных задач свое решение — Яndex.Server. Он предназначен для полнотекстового поиска информации на веб-сервере или в локальной сети с учетом морфологии русского языка и является аналогом поисковой системы, используемой самим Яндексом.

Имеется два варианта поставки этого продукта: бесплатная версия и платная версия Enterprise, различающиеся своими возможностями. Отличия версии Enterprise от бесплатной заключаются в:

□ возможности настройки дизайна страницы результатов поиска с помощью Perl, C++, XSLT;

□ настраиваемом поиске в отдельных частях документа;

□ поиске в нескольких коллекциях документов с возможностью слияния результатов;

□ индексировании документов, хранящихся в СУБД;

□ поддержке индексирования документов в форматах, отличных от простого текстового и HTML (XML, RTF, PDF, DOC, XLS, PPT, FLASH, MP3 — с возможностью расширения этого списка).

Но даже бесплатная версия обеспечивает организацию многих поисковых возможностей Яндекса. Эта версия не содержит лицензионных ограничений на число индексируемых документов, их размер или суммарный размер индекса. Позволяет индексировать документы как через HTTP-соединение, так и чтением локальной файловой системы. Дает независимо настраивать параметры индексирования для разных групп документов. Поддерживает все возможности языка запросов, ранжирования результатов поиска и подсветки найденных слов. Но вывод результатов делает только на встроенную форму дизайна. Кроме того, на использование бесплатной версии имеются и другие ограничения. Так, недопустимо изменение встроенного дизайна страниц результатов поиска, полученных с помощью этой программы, удаление информации об авторских правах. Иными словами, устанавливая программу на свой веб-ресурс, вы не сможете подогнать дизайн поисковика к дизайну вашего сайта. Эта возможность доступна лишь в версии Enterprise.

10.1.1. Настраиваем Яndex.Server

Программу можно разделить на две основные и две вспомогательные подсистемы:

основные — подсистема индексации и подсистема поиска. Индексатор обеспечивает анализ документов и сохранение информации о них в индексных файлах. Поисковый сервер обрабатывает запросы и формирует полученные результаты;

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

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

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

Установка и настройка

Для установки программы под Windows (есть релизы и под другие системы —.nix, FreeBSD, Sun Solaris) достаточно распаковать дистрибутив в выбранный вами раздел (размер дистрибутива для Windows составляет примерно 6 Мбайт), отредактировать конфигурационный файл, установить программу в качестве системного сервиса. После выполнения этих действий поиск готов к работе.

Очень важно правильно настроить конфигурационный файл. С его помощью вы можете настроить программу на конкретные условия вашего сервера — указать, какие каталоги и типы файлов индексировать, а какие исключить, выбрать кодировку русского языка, указать способ получения документов (непосредственно из каталога или через веб-сервер), перестраивать ли весь индекс при новом индексировании или организовать обновление и слияние.

Конфигурационный файл обычно называется yandex.cfg и располагается в том же каталоге, где находится выполняемый модуль Яndex. Server (для Windows). В этом файле можно определять параметры, относящиеся к сервису в целом, к процессу индексирования и процессу поиска. Каждый параметр определяется своей директивой, состоящей из одного или нескольких слов, разделенных пробельными символами.

Директивы конфигурационного файла могут быть сгруппированы в секции. Каждая секция начинается со строки <имя_секции> и кончается строкой , где Имя_секции соответствует параметру, настраиваемому с помощью одной или нескольких директив, расположенных внутри секции. Секции могут быть вложенными.

Секция Server

Секция Server, не являющаяся обязательной, определяет настройки сервера. В ней могут быть определены:

□ IP-адрес, на котором работает Яndex.Server. Значение должно соответствовать одному из допустимых IP-адресов компьютера;

□ порт, на котором работает Яndex.Server. По умолчанию используется порт 17000;

□ хост, на котором работает Яndex.Server. Значение по умолчанию: официальное имя хоста;

□ количество одновременно выполняемых поисковых запросов. Если уже выполняется определяемое данной директивой количество запросов, выполнение вновь поступивших запросов откладывается до тех пор, пока не будут выполнены текущие запросы. По умолчанию это значение равно 5;

□ максимальный размер очереди поисковых запросов, ожидающих начала выполнения. В случае нулевого значения директивы максимальный размер очереди запросов бесконечен. Если начала выполнения уже ожидает определяемое данной директивой количество запросов, на вновь поступившие запросы сервер отвечает HTTP/1.0 503 Service Unavailable и не выполняет их;

□ рабочий каталог Яndex.Server. Должен быть указан абсолютный путь;

□ путь к файлу, в который будут выводиться сообщения Яndex.Server.

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

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

Листинг 10.1. Пример секции Server

Port 80

Host www.my_site.ru Threads 4 QueueSize 20

UserName webadmin UserPassword abv12345

Секция Collection

Поисковый сервер работает с одной или несколькими коллекциями документов, в которых осуществляется поиск. Поиск в каждой коллекции документов осуществляется независимо. По сути коллекции — это наборы документов, разделов сайта, связанные определенными критериями, которые устанавливают их владельцы. Каждая коллекция характеризуется уникальным именем, а если существует только одна коллекция документов, ее имя обычно в конфигурационном файле выбирается пустым. При индексировании для каждой коллекции запускается отдельная подсистема, использующая определенные в конфигураторе правила индексации. При выборе имени коллекции помните, что несколько слов запрещены для использования: admin, images, hl.

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

Для каждой коллекции наборы индексных файлов размещаются в отдельных каталогах, описываемых в конфигурации коллекций. Состав набора индексных файлов также может быть различным. Он зависит от заданных настроек. При индексировании создаются базовые индексы, в которых сохраняется информация о каждом слове документа (за исключением стоп-слов) — идентификатор документа, в котором слово найдено, номер предложения и номер слова в предложении. В этих же файлах сохраняется информация о зонах и атрибутах документов. В других индексных файлах сохраняется неотформатированный текст документов, еще одна пара индексных файлов может сохранять информацию о группировочных атрибутах. Их наличие позволяет группировать и сортировать найденные документы по значению атрибута.

В секции необходимо определить имя файла, в который будут записываться результаты индексирования, например, так:

IndexLog indexer.log

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

Вы, наверно, помните, что "большой" Яндекс индексирует не все слова, найденные в документах. Существует определенный набор стоп-слов, которые игнорируются в процессе обработки. Рассматриваемая программа также может учитывать стоп-слова, не подлежащие индексированию. Этот список входит в состав поставки в виде файла, который вы можете самостоятельно редактировать. При этом необходимо учитывать лишь то, что текст в нем должен быть набран в кодировке Windows-1251. Директива, определяющая имя файла, называется stopWordFiie.

На Яндексе при просмотре результатов поиска для найденных документов присутствует ссылка Сохраненная копия, позволяющая посмотреть документ даже в том случае, если он удален с сайта. Аналогичная возможность есть и в программе Яndex.Server. Режим сохранения документов (без элементов форматирования) задается директивой storeArchive, используемой по умолчанию. Если вы не отказываетесь от использования этой опции, помните, что в этом случае архив сохраненных документов (текстов) может иметь размер до 30–40 % от общего объема проиндексированных документов.

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

При этом размер индекса увеличивается примерно в 2 раза. (В последней версии программы точные словоформы учитываются всегда.)

Примечание

К примеру, при использовании словоформ при поиске слова иди в результаты попали различные формы этого слова, такие как "иду", "идем", "шли", "идущий", "идет" и др. Если бы параметр задан не был, нашлись бы только точно совпадающие с искомым слова.

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

Области индексирования

Для того чтобы поисковый сервер знал, где находятся документы, подлежащие индексированию, в конфигурационном файле описывается область индексирования — множество документов, которые индексируются с единым набором параметров. Например, каждый внешний источник данных соответствует одной отдельной области индексирования. Одной области индексирования принадлежат и все документы, путь к которым задан префиксом URL.

Область индексирования определяется секцией IndexedArea. В одном конфигурационном файле таких секций может быть несколько.

Существует три способа получения данных для индексирования:

□ чтение файлов, доступных в локальной сети, где работает индексатор, с использованием протоколов операционной системы;

□ обращение к веб-серверам по протоколу HTTP;

□ обращение к произвольному внешнему источнику данных по специальному протоколу, реализованному в модуле связи с источником данных.

Если URL получен чтением файлового каталога, содержимое документа может быть получено как чтением файла, так и по протоколу http — в зависимости от настроек. Если URL получен в результате распознавания гипертекстовой ссылки, содержимое документа может быть получено по протоколу HTTP. С помощью чтения локального файла содержимое документа можно получить, только если соответствующий веб-хост принадлежит локальной сети, и в настройках индексатора указаны нужные пути. Если содержимое документа может быть получено только по протоколу HTTP, документ считается принадлежащим внешнему хосту. Индексатор может проиндексировать только те внешние хосты, которые явно указаны в настройках.

Способ доступа к данным для каждой секции indexedArea определяется единственным образом и должен включать одну из возможных директив. Директива HttpPrefix определяет доступ по HTTP-протоколу, директива FilePrefix определяет путь к разделу в локальной сети.

Но можно обойтись и без этих директив, если список начальных адресов (URL) будет в явном виде задан в ключе StartUrls, например, так:

StartUrls = http://localhost/my_site/index.htm

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

Например, для определения режима получения URL документа применяются такие директивы:

□ IndexFollow — индексирует документы и распознает гипертекстовые ссылки для получения URL новых документов;

□ IndexNofollow — позволяет индексировать документы, но не распознает гипертекстовые ссылки для получения URL новых документов;

□ NoindexFollow — если директива включена в конфигурационный файл, то индексатор не будет индексировать документы, а вот ссылки на новые документы, находящиеся в них, будет использовать для получения URL новых документов.

Поисковый сервер и защита от роботов

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

По умолчанию Яndex.Server учитывает содержимое этого мета-тега, что позволяет запретить роботу индексировать какую-то страницу или следовать по ссылкам, содержащимся на ней. Но директивы, входящие в состав конфигурационного файла, могут как разрешить, так и игнорировать значения тега:

□ AllowMetaRobots — учитывает при индексировании содержимое метатега robots;

□ IgnoreMetaRobots — игнорирует содержимое мета-тега.

При индексировании документов по протоколу HTTP Яndex.Server поддерживает стандарт исключений для роботов. В соответствии с этим стандартом, правила, управляющие поведением поискового робота, должны располагаться в файле /robots.txt, лежащем в корне веб-сервера. Но и здесь есть обходные маневры (впрочем, обходные лишь для вас, поскольку на свой веб-сервер этот поисковик вы будете устанавливать сами, и сами будете определять, что включать в состав индексируемых документов, а что не включать). Пример конфигурации HTTP-запросов при индексировании хоста приведен в листинге 10.2.

Листинг 10.2. Пример конфигурации HTTP-запросов при индексировании хоста

Timeout: 150 Delay: 0

ProxyUrl: http://proxy.my_site.ru:8080

UserName: my_site UserPassword: abf12345

User-Agent: MyYandexServer/3.0 From: admin@host.ru Accept-Language: ru, *;q=0.1 MyHeader: TestStroka

Если вам нужно, чтобы Яndex.Server при индексировании вашего сайта не учитывал общие правила для поисковых роботов, модифицируйте файл robots.txt, добавив специальное правило для User-Agent, заданного при конфигурировании HTTP-запросов. В следующем примере (листинг 10.3) каталог скриптов закрывается от всех роботов, кроме робота MyYandexServer, которому открыто все.

Листинг 10.3. Пример файла robots.txt

User-Agent: *

Disallow: /cgi-bin/

User-Agent: MyYandexServer Disallow:

Форматы индексируемых документов

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

Каждая секция DocFormat должна включать обязательную директиву MimeType. Также могут присутствовать необязательные директивы Extensions, Module, Symbol и Config. Директива MimeType задает произвольное имя документного формата, уникально идентифицирующее этот формат. Обычно в качестве идентификатора формата используется так называемый медиа-тип, значения которого специфицированы для большого количества форматов.

Директива Extensions задает расширения файлов данного формата. Если для получения содержимого документа используется файловая система, документы в файлах с заданными расширениями будут считаться имеющими медиатип, указанный в директиве MimeType. Тем не менее если для получения содержимого документа используется веб-сервер, возвращающий заголовок Content-type, в качестве медиа-типа используется значение этого заголовка. Пример секции DocFormat приведен в листинге 10.4.

Листинг 10.4. Пример секции DocFormat

MimeType text/html

Extensions.htm, html, asp

Config attr.cfg

Парсеры

Одно из важнейших свойств поисковой системы — возможность индексирования файлов произвольного формата. Это обеспечивается с помощью отдельных модулей — парсеров (еще их называют интерпретаторами форматов документов). Для каждого типа файлов применяется свой модуль. В платную версию поисковика включены парсеры для документов в форматах XML, RTF, PDF, MP3, FLASH, MS Word, MS Excel, MS PowerPoint, помимо входящих в стандартную поставку парсеров для форматов text/html и text/plain. Используя спецификацию, независимые разработчики могут разработать и иные парсеры, необходимые для используемых ими форматов данных, однако подключить их можно только к платной версии.

Из всех парсеров, поставляемых с программой, два являются конфигурируемыми. Это парсеры HTML и XML-документов. Остальные используются "как есть". В документации, входящей в комплект поставки, есть разделы, посвященные вопросам настройки парсеров под решение конкретных задач.

Внимание

На сайте Яндекса представлена программа mystem (http://company.yandex.ru/

technology/products/mystem/mystem.xml). Это — парсер, осуществляющий морфологический анализ текста на русском языке. Программа предназначена для некоммерческого использования.

У большинства типов документов есть своя внутренняя структура, определенные элементы которой несут свойственную лишь им смысловую нагрузку. В почтовых письмах это могут быть поля from, to, Subj, в вебдокументах — это заголовок, тело документа, ключевые слова. В теле могут присутствовать заголовки различных уровней, ссылки, картинки и т. д. Различные части структурированных таким образом документов в Яндексе называются зонами.

Основная задача парсера — выделить из документа нужный для индексирования текст. Текст, выделяемый парсером, может быть помечен как принадлежащий определенной зоне документа или как имеющий определенные свойства (атрибуты). На основании элементов форматирования документа парсер может указать границы предложений и абзацев, а также вес данного отрывка текста.

Разбиение документа на зоны происходит во время индексирования на основании меток, возвращаемых парсером. Впоследствии каждая зона может стать объектом независимого поиска (вспомните то, что мы уже говорили про поиск — поиск по заголовкам документов, заголовкам писем, адресатам, тегам и т. д.). Каждая поисковая зона имеет точки начала и конца в теле документа. Начало и конец зон всегда приходятся на границы слов.

Индексирование с учетом зон и их характеристик обеспечивает в дальнейшем возможность поиска с учетом нахождения требуемых сведений в определенных зонах. Это очень хорошо заметно на примере языка запросов, о котором мы поговорим, применительно к Яndex.Server, чуть позже.

10.1.2. Как группируются результаты

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

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

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

Параметры группировки

Для выполнения группировки или сортировки результатов в поле запроса требуется добавить определенные параметры, описанные в табл. 10.1.

Полей g может быть несколько — по числу необходимых группировок. Поле g имеет структуру mode.attr.ngrp.ndoc.cur, описанную в табл. 10.2. Необходимо помнить, что по умолчанию при выполнении запроса не делается никаких группировок. Для того чтобы получить ту или иную группировку, необходимо задать поле g. Группировка и сортировка происходят на этапе выполнения запроса, поэтому нельзя использовать функции работы с группами при построении выдачи, если до выполнения поиска не были заданы соответствующие поля.

Поле fa служит для фильтрации найденных документов по значениям указанных группировочных атрибутов. Такая фильтрация выполняется после выполнения поискового запроса, но до начала выполнения группировок. Использование поля fa для фильтрации результатов поиска по группировочным атрибутам предпочтительнее, чем использование поисковых атрибутов в поисковом запросе (если в индексе есть поисковые атрибуты с теми же названиями и числовыми значениями), так как работает быстрее. Поле fa может содержать несколько подвыражений, разделенных точкой с запятой. Каждое подвыражение состоит из названия атрибута, двоеточия и диапазона, в котором должен находиться указанный атрибут у прошедших фильтр документов. Диапазон указывается в виде двух чисел, разделенных дефисом. Если одно из задающих диапазон значений отсутствует, фильтр пройдут документы со значением атрибута, большим или меньшим указанного. Примеры поля fa:

fa=price:40–50

fa=f:1-20;d:-30;t:40-

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

10.1.3. Язык запросов

Язык запросов, используемый в Яndex.Server, в полной мере соответствует языку запросов, с которым работает поисковая система Яндекс. Поэтому все, что можно использовать для поиска в Интернете, новостях, среди картинок, поддерживается и в версии программы, предназначенной для установки на сайте. Такой подход удобен для пользователей — если он знаком с возможностями формирования запросов на Яндексе, то без проблем сможет искать информацию и на вашем сайте.

Задавать вопросы можно и на естественном языке, и используя логические операторы (расширенные возможности Яндекса). Часть расширенных возможностей реализована в виде поисковой страницы, на которую можно перейти по ссылке Расширенный поиск.

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

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

Как и в поиске на Яндексе, здесь также поддерживается поиск синонимов, поиск слов, находящихся на определенном расстоянии друг от друга, поиск словосочетаний.

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

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

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

Вес слова или выражения определяется числом. Это число ставится через двоеточие после слова (или выражения) в строке запроса. Например, если поисковый запрос выглядит так: экспериментальные:4 модели, то? хотя будут найдены те же документы, что и по запросу экспериментальные модели, но вот в начало списка будут выведены те результаты (документы), в которых слово "экспериментальные" встречается чаще.

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

10.1.4. Запускаем Яndex.Server

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

Яndex.Server в старших версиях Windows может работать в двух режимах — как сервис операционной системы и как консольное приложение. Если запустить программу с ключом — i, то программа запустится в качестве сервиса и управлять ею будет возможно через опцию Service панели управления либо с помощью команды NET. Для выгрузки сервиса нужно использовать другой ключ: — r.

Если запускать программу без ключей либо с ключом — d, программа будет запущена как консольное приложение. Остановить его можно будет со страницы администратора приложения (рис. 10.1).

Доступ к странице администратора происходит по адресу, определенному в конфигурационном файле. При этом должен быть указан порт, по которому разрешается доступ к сервису. Так, если порт доступа определен как 17000, а адрес сервиса — http://localhost/, то доступ к странице администратора будет выполняться по адресу http://localhost:17000/admin.

Теперь необходимо проверить, в каком состоянии находятся сервисы индексирования и поиска. По умолчанию после старта. Hndex.Server индексатор находится в остановленном состоянии, а поисковый сервер при наличии индексных файлов автоматически стартует. Если индексные файлы отсутствуют, то веб-сервер продолжает работать, но на поисковые запросы отвечает, что поисковый сервис остановлен. Поэтому перед первым стартом поискового сервера необходимо запустить индексатор и дождаться, пока он завершит построение индексных файлов. Откройте в браузере веб-страницу http://localhost:17000/admin и нажмите на кнопку Запустить, расположенную рядом с заголовком Индексатор: остановлен. Дождитесь окончания процесса индексирования. После окончания индексирования в подкаталоге workindex рабочего каталога должны быть созданы шесть файлов, имеющих ненулевую длину — indexcfg, indexinv, indexkey, indexdir, indexarc, indexdat.

На веб-странице http://localhost:17000/admin нажмите на кнопку Запустить, расположенную рядом с заголовком Поиск: остановлен. Теперь страница http://localhost:17000/ содержит форму для поиска.

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

Работа с поиском

Остался последний шаг — проверить, правильно ли работает поисковый сервер. Самый простой вариант — открыть страницу по адресу http://localhost:17000/.

Яндекс-сервер ожидает поступления HTTP-запросов по указанному в конфигурации сервера порту. Он анализирует запрошенные URL и запрос (часть URL после знака вопроса, содержащую значения полей поисковой формы), выполняя перечисленные далее действия в указанном порядке.

□ Во-первых, выполняется проверка, происходит ли обращение к административной части сервера или нет:

• если путь совпадает со строкой /admin, сервер выдает административную страницу;

• если путь начинается с подстроки /images/, сервер выдает статическую картинку;

• если путь начинается с подстроки /hl, сервер показывает "подсвеченный" документ, указанный в поле запроса url, в котором выделены слова, релевантные запросу, содержащемуся в поле text.

□ Во-вторых, выполняется анализ запроса на наличие в нем дополнительных параметров группирования.

□ И, наконец, если запрос не отправляется на Яндекс и не является управляющим для работы сервера, он обрабатывается для передачи на выполнение сервером. Для этого вызывается функция UserRequest, которая должна сформировать текст поискового запроса на языке запросов Яндекса. Действия, выполняемые в этой функции, обычно сводятся к преобразованию значений некоторых полей поисковой формы в текст поискового запроса. Реализация функции UserRequest по умолчанию использует в качестве поискового запроса значение поля text и может быть изменена в процессе настройки сервера.

Если поисковый запрос успешно получен, выполняется собственно поиск, после чего показывается страница с результатами выполнения запроса, либо, если формат запроса не соответствует ни одному из правил, показывается страница с сообщением об ошибке.

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

Листинг 10.5. Пример настройки поисковой формы на сервере

action="http://www.my_site.ru:17000/">

<Ь>Поиск:

Страница результатов

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

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

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

□ Вторая ссылка позволяет выполнить поиск документов, похожих на найденный. Поиск выполняется на основе алгоритмов Яндекса, таких же, какие применяются в поиске "большого" Яндекса.

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

Примеры использования

Поисковый сервер от Яндекса пользуется заслуженной популярностью за качество, с каким выполняется поиск, и надежность и скорость работы. Сложно сказать, какое количество ресурсов использует бесплатную версию программы. Зато известны ресурсы, применяющие профессиональные версии, позволяющие адаптировать страницы запроса и результатов под решение вебресурса.

Среди таких ресурсов — официальный сайт Президента России (http://www.kremlin.ru) (рис. 10.2), РИА Новости (http://rian.ru/), CNews (http://cnews.ru/), "Альфа-Банк" (http://www.alfabank.ru/), Билайн (http://beeline.ru/), Энциклопедия "Кругосвет" (http://krugosvet.ru/) и многие, многие другие ресурсы.

Применяется Яndex.Server и в локальных сетях, например, в таком варианте его использует Банк Москвы (http://mmbank.ru/), Компания "РУСАЛ" (http://rusal.ru/) и др.

10.2. Яндекс. XML