Яndex.Server 3.8 Free Edition представляет собой набор программных модулей для организации полнотекстового поиска информации в заданных коллекциях документов. Яndex.Server 3.8 Free Edition состоит из следующих основных компонентов.
Яndex.Server 3.8 Free Edition работает с одной или несколькими коллекциями документов, в которых осуществляется поиск. Поиск в каждой коллекции документов осуществляется независимо. Каждая коллекция характеризуется уникальным именем (текстовой строкой). Если существует только одна коллекция документов, ее имя обычно выбирается пустым. Правила, по которым составлена коллекция документов, указываются в секции Collection конфигурационного файла.
Индексатор - это подсистема, анализирующая документы данной коллекции документов и сохраняющая информацию о них в специальных индексных файлах. Каждой коллекции документов соответствует свой набор индексных файлов, который хранится в отдельной директории, и свой собственный индексатор, настройка которого задается в секции Collection конфигурационного файла.
Индексатор разработан так, чтобы индексировать документы произвольного формата. С этой целью чтение документа и интерпретация его формата осуществляется с помощью отдельных модулей, по одному модулю на каждый формат документа. Эти интерпретирующие формат документа модули в дальнейшем называются парсерами. Настройка парсера задается в подсекции DocFormat секции Collection конфигурационного файла. Дополнительная информация о парсерах находится в секции Секция DocFormat.
Индексатор разработан так, чтобы получать документы из произвольных источников или хранилищ документов, таких как файловая система, базы данных, архивы или веб. С этой целью получение содержимого документа осуществляется с помощью отдельных модулей, по одному модулю на каждый формат хранилища документов. Эти модули, понимающие структуру хранилища документов и предоставляющие документы индексатору, в дальнейшем называются источниками данных. Настройка источника данных задается в подсекции DataSrc секции Collection конфигурационного файла.
Поисковый модуль или поисковая машина - это подсистема, осуществляющая разбор запроса, полученного от пользователя, поиск документов в индексных файлах, подготовленных ранее индексатором и формирующая страницы отчета с результатами поиска. Каждой коллекции документов соответствует своя собственная поисковая машина, настройка которой задается в секции Collection конфигурационного файла.
Поисковый модуль и индексатор используют в своей работе языковой модуль. Основная задача языкового модуля - преобразовать слово к его словарной форме с учетом морфологии языка. Алгоритмы морфологического анализа и синтеза, основанные на базовом словаре, умеют не только находить словарную форму слова, но и строить гипотезы для слов, не содержащихся в базовом словаре. В данной версии программы поддерживается морфология русского и английского языков.
Поисковый модуль может быть частью HTTP-сервера, который принимает запросы пользователей на поиск документов и возвращает результаты их выполнения в виде веб-страниц.
Таким образом, основными логическими частями Яndex.Server 3.8 Free Edition являются индексатор и поисковый модуль. После создания индексных файлов индексатор обычно прекращает прекращает работу, в то время как поисковый модуль после запуска находится в постоянном ожидании запросов на поиск. Для успешного старта поисковому модулю необходимы индексные файлы, созданные индексатором.
Если коллекция документов со временем изменяется за счет добавления, изменения или удаления документов, индексные файлы постепенно теряют актуальность. В этом случае необходимо время от времени запускать индексатор и обновлять индексные файлы. Обычно при этом используются настройки источника данных, позволяющие не переиндексировать неизменившиеся документы.
Возможность обращаться к поисковой машине на естественном (русском или английском) языке (например, играл ли Спартак с Динамо в марте?).
Поиск идет с учетом морфологии языка, то есть может быть произведен по всем формам слова (например, если задан запрос идти, будут найдены документы со словами идет, шел, шла).
По умолчанию поиск учитывает все формы заданного слова, однако существует возможность поиска по точной словоформе.
Построение словарных гипотез для слов, не содержащихся в базовом словаре (неологизмы, сленг, имена собственные и т.д.)
Возможность находить документы, в которых заданные слова идут строго подряд.
Возможность находить документы, в которых указанные слова находятся на заданном расстоянии друг от друга, или на расстоянии, не большем (не меньшем) данного. Расстояние может быть задано в словах или в предложениях.
Поддержка логических операторов И, ИЛИ, И НЕ как в пределах документа, так и в пределах предложения.
Возможность искать документы с датой последнего изменения в заданном диапазоне.
Возможность искать в определенных зонах документа, заданных при индексировании. В частности, можно искать в заголовках и аннотациях HTML-документов.
Возможность учитывать при поиске как атрибуты целого документа, заданные при индексировании, так и атрибуты отдельных частей документа. Например, можно искать документы с заданными ключевыми словами, в заданном каталоге или содержащие заданную картинку.
Возможность одновременного распознавания нескольких языков с учетом кодировок.
Поддержка нескольких независимых коллекций документов. Возможность поиска в одной или нескольких коллекциях.
Возможность логически структурировать информацию, организовывая поиск по тематическим разделам коллекции документов.
Возможность сгруппировать найденные документы в соответствии с их внешними атрибутами, такими как хост или категория каталога.
Возможность сортировки найденных документов по степени соответствия запросу, по дате или по одному из атрибутов, определенных при индексировании. Пользователь может повлиять на порядок сортировки, используя операторы веса и уточнения запроса.
Результаты поиска могут быть представлены в виде последовательности HTML-страниц, с возможностью произвольного перемещения между страницами и возможностью показывать произвольное число найденных документов на одной странице.
Результаты поиска могут быть представлены в виде XML-документа с определенной схемой.
Поисковый сервис может быть быстро запущен с использованием представления результатов поиска в дизайне по умолчанию.
Возможность реализовать HTML-формы, представляющие "расширенный поиск" для пользователей, которые не хотят использовать язык запросов. Поля формы преобразуются в строку поискового запроса с помощью специальной процедуры.
Возможность выделять слова, найденные в заголовках, на странице с результатами поиска. Возможность показывать отдельные предложения документа, содержащие найденные слова, на странице с результатами поиска.
Возможность просмотреть найденный документ с выделенными поисковыми словами. Возможность пролистывать документ к следующему или предыдущему найденному слову. Статистика найденных слов для каждого документа.
Возможность проводить индексирование без остановки поискового сервиса.
Не содержит ограничений на число индексируемых документов, их размер и суммарный размер индекса.
Полнотекстовый индекс без учета точных словоформ занимает менее одной трети от объема проиндексированного текста и создается со скоростью около 40 Мб/мин на однопроцессорной машине класса Pentium IV, 512МБ ОЗУ.
Возможность исключить из индекса слова, лишенные самостоятельной смысловой нагрузки, с целью уменьшения его размера.
Содержимое индексируемых документов может быть получено в результате запроса к HTTP-серверу. Индексируемый документ может представлять собой результат работы серверного скрипта, принимающего параметры по методу GET. Автоматическая поддержка редиректов.
Возможность настраивать время разрыва HTTP-соединения, используемый прокси-сервер, пароли доступа и посылаемые HTTP-заголовки для различных групп индексируемых документов.
Содержимое индексируемых документов может быть получено чтением файловой системы локальной сети.
Адреса документов для индексирования могут быть получены с помощью индексирующего "паука", начинающего индексирование с одного или нескольких заданных документов, и собирающего гипертекстовые ссылки для дальнейшего индексирования.
Возможность автоматически распознавать язык и кодировку индексируемого документа.
Возможность переиндексировать только измененные документы. Возможность оставлять в индексе документы, временно недоступные во время индексирования. Независимая настройка многочисленных параметров индексирования для разных групп документов.
Возможность применения различных фильтров для того, чтобы индексировать или не индексировать документы, адреса которых удовлетворяют заданным шаблонам.
Таблица 1-1. Поддерживаемые платформы
Операционная система | Версии | Версия компилятора |
---|---|---|
FreeBSD-4 (i686) | 4.9 и выше | GCC 3.4.6 |
FreeBSD-5 (i686) | 5.5 и выше | GCC 3.4.6 |
Linux (i686) | glibc-2.3 и выше, kernel >= 2.5.66 | GCC 3.3.5 |
Windows (i686) | 9х/NT/2000/XP/2003. | MSVC 7.1 |
Для установки Яndex.Server 3.8 Free Edition необходимо следующее аппаратное и программное обеспечение:
10-50 Мб свободного дискового пространства для установки программных модулей и конфигурационных файлов системы.
Свободное дисковое пространство для размещения создаваемых системой файлов индекса и временных файлов.
Замечание: Общий объем свободного дискового пространства, необходимого системе в процессе работы, можно оценить лишь приблизительно. При расчетах нужно учитывать следующее: общий объем индексных файлов может достигать от 30% до 90% суммарного объема проиндексированных документов. При переиндексации потребуется еще примерно столько же места, т.к. создавая новые индексные файлы, индексатор не удаляет старые. Кроме того, при обработке запросов поисковый сервер может создавать временные файлы, количество которых зависит от интенсивности запросов.
Яndex.Server 3.8 Free Edition настраивается с помощью размещения директив в одном или нескольких текстовых конфигурационных файлах. В некоторых директивах основного конфигурационного файла могут задаваться дополнительные конфигурационные файлы.
Каждая директива конфигурационного файла соответствует одному из параметров настройки. Директивы состоят из одного или нескольких слов, разделенных пробельными символами. Первое слово директивы является ключом, соответствующим настраиваемому параметру, остальные - аргументами, задающими значение параметра. Помимо пробельных символов, ключ директивы может отделяться от аргументов необязательными символами : (двоеточие) и = (равно), но не более, чем одним. Аргументы директивы могут отделяться друг от друга, помимо пробельных символов, символом , (запятая). Конфигурационные файлы включают одну директиву на строку. Для переноса аргументов директивы на следующую строку может быть использован обратный слеш (\), расположенный на конце строки. (То есть, если между символом обратного слеша и символом конца строки находятся только пробельные символы, то директива переносится на следующую строку, а символ \ игнорируется.) Ключи директив конфигурационного файла являются регистро-независимыми, но аргументы директив зависят от регистра символов.
Директивы конфигурационного файла могут быть сгруппированы в секции. Каждая секция начинается со строки <Имя_Секции> и кончается строкой </Имя_Секции>, где Имя_Секции соответствует параметру, который настраивается с помощью одной или нескольких директив, расположенных внутри секции. Секции могут быть вложенными. Директивы конфигурационного файла, которые не лежат в какой-либо секции, считаются принадлежащими подразумеваемой главной секции, включающей весь конфигурационный файл.
Строки конфигурационного файла, расположенные внутри секции и начинающиеся с символов #, ! или ;, рассматриваются как комментарии и игнорируются. Однако, если указанные символы встречаются в середине или конце строки, они считаются значимыми. Пустые строки и пробельные символы в начале строки игнорируются, поэтому могут использоваться, чтобы сделать запись более ясной. Помимо этого, в любом месте конфигурационного файла могут быть расположены комментарии в XML/HTML-стиле, начинающиеся с символов <!-- и заканчивающиеся символами -->.
Ниже приведен фрагмент конфигурационного файла Яndex.Server 3.8 Free Edition
Пример 1-1. Формат конфигурационного файла
<Server> WorkDir /yandex/server IPAddress 192.168.0.1 Host myhost Port 17000 Threads 5 QueueSize 20 ServerLog yandex.log <Authorization> UserName user UserPassword password </Authorization> </Server> <Collection id="abc" autostart="yes" > IndexDir : workindex TempDir : newindex StopWordFile : GlobalOptions : Update StoreArchive IgnoreWordFreqs DiscardStopWords StoreIndexingDate DocProperty : Groups : <IndexLog> Filename : index.log Level : Config Warning Info <IndexLog> <DocFormat> MimeType : text/html </DocFormat> ... <DataSrc id="ftds"> ... </DataSrc> ... </Collection> <Collection id="def" autostart="no" > ... </Collection> ...
Изменения формата конфигурационного файла по сравнению с предыдущей версией связано в первую очередь с изменением архитектуры программы, ключевым понятием которой в настоящее время является понятие "источник данных".
# # Путь к файлу протокола индексирования и настройка выдачи тестовой информации. # 3.4 IndexLog index.log Debug limits config excluded info moreinfo warning backup verbose 3.6 <IndexLog> FileName index.log Level MoreConfig Warning MoreWarning Info MoreInfo Debug MoreDebug Verbose </IndexLog>
# Сохранение точных словоформ: 3.4 # StoreWordForms - Точные словоформы учитываются в индексе. # DiscardWordForms - Точные словоформы не учитываются в индексе. # Значение по умолчанию: DiscardWordForms # 3.6 # Точные словоформы всегда учитываются в индексе.
# Конфигурация источников данных 3.6 <DataSrc id="ftds"> # Идентификатор стандартного источника Config ftds.cfg # Внешний ... # ... либо вложеный конфиг <Ftds> <Folder> Path /usr/local/www/data/ </Folder> <Extensions> text/html: .html .htm .shtml </Extensions> </Ftds> </DataSrc>
# Задание областей индексирования, режимов обновления индекса, # режимов получения документов и т.д. 3.4 StartUrls http://_your_site_name_/ Disallow /(_index|default)[.]htm[l]? Allow /(199[0-9]|archive)/ DefaultHttpPrefix http://127.0.0.1/ DefaultAreaOptions AllowMetaRobots Update RemoveDisconnected Reconnect Recognize AllowPunctBreaks <IndexedArea> HttpPrefix / FilePrefix C:/ Options Set attr=value , Unset attr = value \ FindLinks FindDir NoUrlCaseFold UrlCaseFold IndexFollow IndexNofollow \ NoindexFollow AllowMetaRobots IgnoreMetaRobots GetFile GetHttp GetHttp:configid </IndexedArea> 3.6 # Индексирование по http <DataSrc id="webds"> <Webds> StartUrls http://_your_site_name_/ Disallow /(_index|default)[.]htm[l]? Allow /(199[0-9]|archive)/ DefaultHttpPrefix http://127.0.0.1/ DefaultAreaOptions AllowMetaRobots Update RemoveDisconnected Reconnect Recognize AllowPunctBreaks <IndexedArea> HttpPrefix / FilePrefix C:/ Options Set attr=value , Unset attr = value \ FindLinks NoUrlCaseFold UrlCaseFold IndexFollow IndexNofollow \ NoindexFollow AllowMetaRobots IgnoreMetaRobots GetFile GetHttp GetHttp:configid </IndexedArea> </Webds> </DataSrc> # Индексирование по файловой системе <DataSrc id="ftds"> <Ftds> <Folder> Path /usr/local/www/data/ </Folder> <Extensions> text/html: .html .htm .shtml </Extensions> </Ftds> </DataSrc>