Документация пользователя Harvest Darren R. Hardy, Michael F. Schwartz, Duane Wessels, Kang- Jin Lee 2002-09-04 Документация пользователя Harvest была отредактирована Kang-Jin Lee и относится к Harvest version 1.8. Первоначально она была написана Dar╜ ren R. Hardy, Michael F. Schwartz и Duane Wessels для Harvest 1.4.pl2 31 января 1996г. ______________________________________________________________________ Table of Contents 1. Введение в Harvest 1.1 Copyright 1.2 Ресурсы Harvest Online 2. Обзор подсистем 2.1 Распределение процессов Gathering и Brokering 3. Установка ПО Harvest 3.1 Требования к серверам Harvest 3.1.1 ``Железо'' 3.1.2 Платформы 3.1.3 ПО 3.2 Требования к пользователям Harvest 3.3 Получение и установка ПО Harvest 3.3.1 Типы дистрибутивов 3.3.2 Компоненты Harvest 3.3.3 Программное обеспечение, созданное пользователями 3.4 Компилирование исходников 3.5 Дополнительная установка для Harvest Broker 3.5.1 Проверка установки на возможность HTTP доступа 3.5.2 Необходимые изменения вашего сервера HTTP 3.5.3 Apache httpd 3.5.4 Другие сервера HTTP 3.6 Модернизация ПО Harvest 3.6.1 Переход от версии 1.6 до версии 1.8 3.6.2 Переход от версии 1.5 до версии 1.6 3.6.3 Переход от версии 1.4 до версии 1.5 3.6.4 Переход от версии 1.3 до версии 1.4 3.6.5 Переход от версии 1.2 до версии 1.3 3.6.6 Переход от версии 1.1 до версии 1.2 3.6.7 Переход к версии 1.1 с версии 1.0 или более ранних версий 3.7 Запуск системы: команда RunHarvest и связанные с ней команды 3.8 Контактная информация команды разработчиков Harvest 4. Gatherer 4.1 Обзор 4.2 Начальная установка 4.2.1 Сбор новостных URL'ов (News) при помощи NNTP 4.2.2 Очистка Gatherer'а 4.3 Описание RootNode 4.3.1 Фильтры RootNode 4.3.2 Описание програмы нумерации 4.3.3 Пример конфигурации RootNode 4.3.4 Нумерация Gatherer'а и выбор кандидатов 4.4 Генерация LeafNode/RootNode URL'ов из программы 4.5 Извлечение данных для индексации: Подсистема суммирования Essence 4.5.1 Действия стандартных summarizer'ов по умолчанию 4.5.2 Суммирование данных SGML 4.5.2.1 Размещение вспомогательных файлов 4.5.2.2 Таблица соответствий SGML - SOIF 4.5.2.3 Ошибки и предупреждения парсера SGML 4.5.2.4 Создание summarizer'а для новых типов данных SGML 4.5.2.5 HTML summarizer на основе SGML 4.5.2.6 Добавление META данных в ваш HTML 4.5.2.7 Другие примеры 4.5.3 Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования 4.5.3.1 Настройка шага распознавания типов 4.5.3.2 Настройка шага выбора кандидатов 4.5.3.3 Настройка шага извлечения представлений 4.5.3.4 Настройка шага суммирования 4.6 Пост-суммирование: настройка резюме объектов (object summaries) по правилам 4.6.1 Файл правил 4.6.2 Rewriting URLs 4.7 Администрирование Gatherer'а 4.7.1 Задание значений переменных в конфигурационном файле Gatherer'а 4.7.2 Собирание на локальной файловой системе для сниженной загрузки процессора 4.7.3 Собирание с серверов, защищенных паролем 4.7.4 Контроль доступа к базе данных Gatherer'а 4.7.5 Периодическое собирание и обновления в реальном времени 4.7.6 Дисковый кэш 4.7.7 Включение в Gatherer информации, сгенерированной вручную 4.8 Устранение неполадок 5. Broker 5.1 Обзор 5.2 Начальная установка 5.3 Отправление запросов Broker'у 5.3.1 Примеры запросов 5.3.2 Регулярные выражения 5.3.3 Опции запросов, выбираемые в меню или кнопками 5.3.4 Фильтрование результатов запроса 5.3.5 Представление результатов 5.4 Настройка выдаваемого результата на запрос Broker'у 5.4.1 Конфигурационный файл search.cf 5.4.1.1 Определенные переменные 5.4.1.2 Список определений 5.4.2 Пример файла настроек search.cf 5.4.3 Интегрирование ваших настроенных конфигурационных файлов 5.4.4 Выдача атрибутов SOIF в результатах 5.5 Описание интерфейса World Wide Web 5.5.1 Файлы HTML для графического пользовательского интерфейса 5.5.2 Программы CGI 5.5.3 Файлы помощи пользователю 5.6 Администрирование Broker'а 5.6.1 Удаление нежелательных объектов брокера 5.6.2 Администрирование из командной строки 5.7 Настройка индексирования Glimpse в Broker'е 5.7.1 Программа glimpseserver 5.8 Использование различных индексирующих/поисковых систем вместе с Broker'ом 5.8.1 Использование Swish в качестве индексера 5.8.2 Использование WAIS в качестве индексера 5.9 Описание интерфейса коллектора: Collection.conf 5.10 Устранение неполадок 6. Программы и размещение установленного ПО Harvest 6.1 $HARVEST_HOME 6.2 $HARVEST_HOME/bin 6.3 $HARVEST_HOME/brokers 6.4 $HARVEST_HOME/cgi-bin 6.5 $HARVEST_HOME/gatherers 6.6 $HARVEST_HOME/lib 6.7 $HARVEST_HOME/lib/broker 6.8 $HARVEST_HOME/lib/gatherer 6.9 $HARVEST_HOME/tmp 7. Формат взаимообмена краткими изложениями документов (SOIF) 7.1 Формальное описание SOIF 7.2 Список общих имен атрибутов SOIF 8. Примеры Gatherer 8.1 Пример 1 - простой Gatherer 8.2 Пример 2 - включение информации, сгенерированной вручную 8.3 Пример 3 - Настройка распознавания типов и выбора кандидатов 8.4 Пример 4 - настройка распознавания типов и суммирование 8.4.1 Использование регулярных выражений для суммирования формата 8.4.2 Использование программ для суммирования формата 8.4.3 Запуск примера 8.5 Пример 5 - Использование фильтров RootNode 9. История Harvest 9.1 История Harvest 9.2 История документации Harvest ______________________________________________________________________ 11.. ВВввееддееннииее вв HHaarrvveesstt HARVEST - это объединенный набор средств для собирания, извлечения, систематизирования и поиска информации в Internet. Небольшими усилиями пользователи могут адаптировать Harvest для систематизации информации в различных форматах и предложить свои услуги поиска в Internet. Главная задача Harvest - предоставить гибкую систему, которая может быть настроена различными способами для создания большого числа типов индексов. Harvest также позволяет пользователям извлекать структурированную (пара атрибут-значение) информацию из многих различных форматов хранения информации и строить индексы, которые позволят обращаться к этим атрибутам во время запросов (например, поиск всех документов, содержащих определенное регулярное выражение в поле "заголовок"). Важное преимущество Harvest заключается в том, что он позволяет пользователям строить индексы используя или свои шаблоны (для максимального контроля над содержанием индекса), или созданные автоматически шаблоны извлеченных данных (для легкого охвата больших коллекций), смесь этих двух способов. Harvest спроектирован для легкого распределения поисковой системы на множество машин, подключенных к сети, для управления более высокими нагрузками. 11..11.. CCooppyyrriigghhtt Ядро Harvest находится под лицензией GPL . Дополнительные компоненты, поставляемые вместе с Harvest, также находятся под GPL или похожими лицензиями. Glimpse, на данный момент используемая по умолчанию полнотекстовая система индексации имеет другую лицензию. Вот прояснение статуса авторского права Glimpse , любезно предоставленное Golda Velez в comp.infosystems.harvest . 11..22.. РРеессууррссыы HHaarrvveesstt OOnnlliinnee Эта документация доступна на harvest.sourceforge.net/harvest/doc/html/manual.html. Болле подробную информацию о Harvest можно получить на harvest.sourceforge.net. 22.. ООббззоорр ппооддссииссттеемм Harvest состоит из нескольких подсистем. Подсистема _G_a_t_h_e_r_e_r собирает индексируемую информацию (такую как ключевые слова, имена авторов и заголовки) с ресурсов, доступных на сайтах _P_r_o_v_i_d_e_r'ов (таких как FTP и HTTP сервера). Подсистема _B_r_o_k_e_r получает индексируемую информацию от одного или нескольких Gatherer'ов, избавляется от повторной информации, постепенно индексирует собранную информацию и предоставляет WWW интерфейс для запросов к нему. Компоненты ПО Harvest Следует начать использование Harvest просто установив один ``готовый'' (т.е. не настроенный) Gatherer и Broker на одну машину для индексирования некоторых FTP, World Wide Web и NetNews данных на вашем сайте. После того, как вы получите работающую систему в этой основной конфигурации, вы можете обоснованно предпринимать дальнейшие усилия. Во-первых, дойдя до увеличения объемов индексируемой информации, вы можете уменьшить нагрузку процессора и сети для индексацци ваших данных распределяя процесс сбора. Во-вторых, вы можете настроить Harvest так, чтобы он извлекал, индексировал и искал вашу информацию лучше сопоставляя типы имеющихся у вас данных и способы, которыми ваши пользователи хотели бы взаимодействовать с данными. Мы обсудим, как распределить процесс сбора в следующем разделе. Мы охватим различные формы настройки в разделе ``Настройка распознавания типов, выбора кандидатов, представление разбора и суммирование'' и в разных частях раздела ``Broker''. 22..11.. РРаассппррееддееллееннииее ппррооццеессссоовв GGaatthheerriinngg ии BBrrookkeerriinngg Harvest Gatherer'ы и Broker'ы могут быть сконфигурированы различными способами. Запуск Gatherer'а удаленно с сайта провайдера позволяет Harvest'у взаимодействовать с сайтами, не использующими Harvest Gatherer'ы, используя стандартные протоколы получения объектов как FTP, Gopher, HTTP, and NNTP. Однако, как показано толстыми линиями слева на рисунке ``2'', такое расположение приводит к излишку нагрузки сервера и сети. Запуск Gatherer'а локально более эффективно, как показано справа на рисунке ``2''. Тем не менее, запускать Gatherer'ы удаленно все же лучше, чем иметь много сайтов, независимо собирающих индексируемую информацию, так как много Broker'ов или других поисковых служб могут совместно использовать индексируемую информацию, которую собирает Gatherer. Если у вас есть много FTP/HTTP/Gopher/NNTP серверов на вашем сайте, то наиболее правильно запустить Gatherer на каждой машине, где есть сервер. С другой стороны, вы можете уменьшить усилия на установку, запустив Gatherer всего на одной машине на вашем сайте и позволив ему получить данные по сети. Варианты конфигурации Harvest Рисунок ``2'' также показывает, что Broker может собирать информацию от нескольких Gatherer'ов (чтобы построить индекс широко разбросанной информации). Broker'ы могут также получать информацию от других Broker'ов, в сущности передавая проиндексированную информацию друг другу. Broker'ы получают эту информацию, используя интерфейс запросов, позволяя фильтровать или очищать информацию от одного Broker'а к другому. 33.. УУссттааннооввккаа ППОО HHaarrvveesstt 33..11.. ТТррееббоовваанниияя кк ссееррввеерраамм HHaarrvveesstt 33..11..11.. ````ЖЖееллееззоо'''' Хорошая машина для запуска обычного сервера Harvest должна иметь достаточно быстрый процессор, 1-2 GB свободного дискового пространства и 128 MB RAM. Медленный процессор будет работать, но будет сильно тормозить сервер Harvest. Однако, размер памяти важнее чем скорость процессора. Harvest использует много процессов, некоторые из которых предоставляют необходимую ``связь'' (т.е., например, search.cgi связывает пользователя с брокером), а некоторые улучшают производительность (например, процесс glimpseserver ). Если у вас недостаточно памяти, ваша система будет слишком много записываться на диск и значительно уменьшит производительность. Другой фактор, влияющий на использование RAM, заключается в том, сколько вы пытаетесь проиндексировать брокером Harvest. Чем больше данных, тем больше будет выполняться операций ввода/вывода за время запроса, и тем больше памяти будет занято, чтобы предоставить дисковый буфер разумного размера. Количество места на диске, которое вам понадобится зависит от того, сколько данных вы хотите проиндексировать одним брокером. (Можно распределить ваш индекс на несколько брокеров, если одного диска становится недостаточно.) Опыт показывает, что вам понадобится места на диске около 10% от общего размера данных, подлежащих индексированию, для содержания Gatherer'а и Broker'а. Реальные размеры будут зависеть от типа данных, которые вы индексируете. Например, PostScript достигает значительно большего уменьшения индексного пространства, чем HTML, потому что очень много информации в PostScript (такой как информация о расстановке страниц) отбрасывается при построении индекса. 33..11..22.. ППллааттффооррммыы Для того, чтобы запустить сервер Harvest, вам нужна UNIX-подобная операционная система. 33..11..33.. ППОО Для использования Harvest вам необходимы следующие программные пакеты: ╥ Все сервера Harvest требуют: Perl v5.0 или выше. ╥ Harvest Broker и Gatherer требуют: GNU gzip v1.2.4 или выше. ╥ Harvest Broker требует: HTTP сервер. Для того, чтобы собрать Harvest из дистрибутива с исходниками, вам может понадобиться установить один или больше из следующих программных пакетов: ╥ Для компилирования Harvest необходимо: GNU gcc v2.5.8 или выше. ╥ Для компилирования брокера Harvest необходимо: flex v2.4.7 или выше и bison v1.22 или выше. Исходники gcc, gzip, flex и bison можно взять на GNU FTP сервере . 33..22.. ТТррееббоовваанниияя кк ппооллььззооввааттеелляямм HHaarrvveesstt Любой, у кого есть веб-броузер (например, Internet Explorer, Lynx, Mozilla, Netscape, Opera и др.), может использовать сервера Harvest. 33..33.. ППооллууччееннииее ии ууссттааннооввккаа ППОО HHaarrvveesstt 33..33..11.. ТТииппыы ддииссттррииббууттииввоовв Сейчас мы предлагаем только один дистрибутив с исходниками Harvest. _Д_и_с_т_р_и_б_у_т_и_в _с _и_с_х_о_д_н_и_к_а_м_и содержит весь исходный код для ПО Harvest. Нет _б_и_н_а_р_н_ы_х _д_и_с_т_р_и_б_у_т_и_в_о_в Harvest'а. Вы можете получить дистрибутивы с исходниками Harvest на странице загрузки Harvest prdownloads.sourceforge.net/harvest/. 33..33..22.. ККооммппооннееннттыы HHaarrvveesstt Компоненты Harvest находятся в каталоге _c_o_m_p_o_n_e_n_t_s. Чтобы использовать компонент, следуйте инструкциям, находящимся в каталоге соответствующего компонента. 33..33..33.. ППррооггррааммммннооее ооббеессппееччееннииее,, ссооззддааннннооее ппооллььззооввааттеелляяммии Существует коллекция неподдерживаемого ПО, созданного пользователями в каталоге _c_o_n_t_r_i_b. Если вы хотите внести свой вклад и предоставить ваше ПО, отправьте, пожалуйста, письмо на lee@arco.de . 33..44.. ККооммппииллииррооввааннииее ииссххооддннииккоовв Дистрибутив с исходниками можно извлечь в любой каталог. Следующая команда извлечет архив gnu-zip с исходниками: % gzip -dc harvest-x.y.z.tar.gz | tar xf - Для архивов, сжатых при помощи bzip2, используйте: % bzip2 -dc harvest-x.y.z.tar.bz2 | tar xf - Harvest использует пакеты GNU _a_u_t_o_c_o_n_f для предоставления необходимой конфигурации в процессе установки. Если вы хотите заменить место установки по умолчанию _/_u_s_r_/_l_o_c_a_l_/_h_a_r_v_e_s_t, измените переменную ``prefix'' при запуске ``configure''. При желании можете отредактировать _s_r_c_/_c_o_m_m_o_n_/_i_n_c_l_u_d_e_/_c_o_n_f_i_g_._h перед компиляцией, чтобы изменить различные переменные и ограничения времени компиляции Harvest'а. Чтобы скомпилировать дерево исходников, наберите make. Например, чтобы построить и установить полную систему Harvest в каталог _/_u_s_r_/_l_o_c_a_l_/_h_a_r_v_e_s_t , наберите: % ./configure % make % make install Вы можете увидеть несколько предупреждающих сообщений компилятора, которые можно проигнорировать. Построение полного дистрибутива Harvest займет несколько минут на достаточно быстрой машине. Скомпилированное дерево исходников занимает примерно 25 мегабайт дискового пространства. Потом, после того, как заработает установленное ПО, вы можете удалить скомпилированный код (файлы ".o") и прочие промежуточные файлы, набрав make clean. Если вы хотите удалить файлы, созданные configure (Makefiles), наберите make distclean. 33..55.. ДДооппооллннииттееллььннааяя ууссттааннооввккаа ддлляя HHaarrvveesstt BBrrookkeerr 33..55..11.. ППррооввееррккаа ууссттааннооввккии ннаа ввооззммоожжннооссттьь HHTTTTPP ддооссттууппаа Broker взаимодействует с вашим сервером HTTP различными способами. Следует убедиться, что сервер HTTP имеет необходимый доступ к нужным ему файлам. Часто сервер HTTP запускается пользователем, не являющимся владельцем файлов Harvest. Во-первых, убедитесь, что userid сервера HTTP может прочитать файлы _q_u_e_r_y_._h_t_m_l в каталогах каждого брокера. Во-вторых, убедитесь, что userid сервера HTTP имеет доступ и может запустить программы CGI в _$_H_A_R_V_E_S_T___H_O_M_E_/_c_g_i_-_b_i_n_/. Скрипт search.cgi читает файлы из каталога _$_H_A_R_V_E_S_T___H_O_M_E_/_c_g_i_-_b_i_n_/_l_i_b_/, так что проверьте его тоже. Наконец, проверьте файлы в _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/. Некторые скрипты Perl CGI требуют файлы ``include'' в этом каталоге. The Broker interacts with your HTTP server in a number of ways. You should make sure that the HTTP server can properly access the files it needs. In many cases, the HTTP server will run under a different userid than the owner of the Harvest files. 33..55..22.. ННееооббххооддииммыыее ииззммееннеенниияя вваашшееггоо ссееррввеерраа HHTTTTPP Harvest Broker требует, чтобы был запущен сервер HTTP, и чтобы сервер HTTP ``знал'' о файлах Broker'а. Ниже приведено несколько примеров того, как настроить различные сервера HTTP для работы с Harvest Broker. 33..55..33.. AAppaacchhee hhttttppdd Требует SSccrriippttAAlliiaass и AAlliiaass записи в _h_t_t_p_d_._c_o_n_f, например: ScriptAlias /Harvest/cgi-bin/ Your-HARVEST_HOME/cgi-bin/ Alias /Harvest/ Your-HARVEST_HOME/ _В_Н_И_М_А_Н_И_Е_: Запись SSccrriippttAAlliiaass должна появиться _п_е_р_е_д записью AAlliiaass. Дополнительно может оказаться необходимым настроить Apache httpd, чтобы он следовал _п_о _с_и_м_в_о_л_и_ч_е_с_к_и_м _с_ы_л_к_а_м. Чтобы сделать это, добавьте следующее в ваш _h_t_t_p_d_._c_o_n_f: Options FollowSymLinks 33..55..44.. ДДррууггииее ссееррввеерраа HHTTTTPP Установите сервер HTTP и измените его конфигурационный файл так, чтобы каталог _/_H_a_r_v_e_s_t указывал на _$_H_A_R_V_E_S_T___H_O_M_E. Вам также понадобится настроить ваш сервер HTTP так, чтобы он знал, что каталог _/_H_a_r_v_e_s_t_/_c_g_i_-_b_i_n содержит программы CGI. Если по умолчанию ваш сервер не следует по символическим ссылкам, вам нужно настроить его так, чтобы он следовал по символическим ссылкам в каталоге _/_H_a_r_v_e_s_t. 33..66.. ММооддееррннииззаацциияя ППОО HHaarrvveesstt 33..66..11.. ППееррееххоодд оотт ввееррссииии 11..66 ддоо ввееррссииии 11..88 _Н_е_л_ь_з_я устанавливать версию 1.8 поверх версии 1.6. Например, изменения версии 1.8 по сравнению с 1.6 включают некоторую реорганизацию исполняемых файлов, и, следовательно, простая установка версии 1.8 поверх версии 1.6 приведет в некоторых случаях к использованию старых исполняемых файлов. Для перехода Harvest'а с версии 1.6 до 1.8: 1. Переместите старую установку во временный каталог. 2. Установите новую версию, руководствуясь инструкцией, поставляемой с Harvest'ом. 3. Потом, для каждого Gatherer'а и Broker'а, которые вы запускали в старой инсталляции, переместите сервер на новую инсталляцию. GGaatthheerreerr''ыы:: необходимо переместить каталог Gatherer'а в _$_H_A_R_V_E_S_T___H_O_M_E_/_g_a_t_h_e_r_e_r_s. Раздел ``Описание RootNode'' показывает специфику загрузки Gatherer'а, если вы хотите внести изменения в конфигурационный файл вашего Gatherer'а. BBrrookkeerr''ыы:: переделайте ваш Broker, используя CreateBroker, и сделайте все настройки, которые были у вашего старого Broker'а. 33..66..22.. ППееррееххоодд оотт ввееррссииии 11..55 ддоо ввееррссииии 11..66 Нет никаких известных несовместимостей между версиями 1.5 и 1.6. 33..66..33.. ППееррееххоодд оотт ввееррссииии 11..44 ддоо ввееррссииии 11..55 _Н_е_л_ь_з_я устанавливать версию 1.5 поверх версии 1.4. Например, изменения версии 1.5 по сравнению с 1.4 включают некоторую реорганизацию исполняемых файлов, и, следовательно, простая установка версии 1.5 поверх версии 1.4 приведет в некоторых случаях к использованию старых исполняемых файлов. Для перехода Harvest'а с версии 1.4 до 1.5: 1. Переместите старую установку во временный каталог. 2. Установите новую версию, руководствуясь инструкцией, поставляемой с Harvest'ом. 3. Потом, для каждого Gatherer'а и Broker'а, которые вы запускали в старой инсталляции, переместите сервер на новую инсталляцию. GGaatthheerreerr''ыы:: необходимо переместить каталог Gatherer'а в _$_H_A_R_V_E_S_T___H_O_M_E_/_g_a_t_h_e_r_e_r_s. Раздел ``Описание RootNode'' показывает специфику загрузки Gatherer'а, если вы хотите внести изменения в конфигурационный файл вашего Gatherer'а. BBrrookkeerr''ыы:: необходимо переместить каталог Broker'а в _$_H_A_R_V_E_S_T___H_O_M_E_/_b_r_o_k_e_r_s. Удалите все файлы _._g_l_i_m_p_s_e___* из каталога вашего Broker'а и используйте интерфейс _a_d_m_i_n_._h_t_m_l для полного индексирования. Возможно, вы захотите перестроить ваш Broker, используя CreateBroker, после чего вы сможете использовать новый _q_u_e_r_y_._h_t_m_l и связанные с ним файлы. 33..66..44.. ППееррееххоодд оотт ввееррссииии 11..33 ддоо ввееррссииии 11..44 Нет никаких известных несовместимостей между версиями 1.3 и 1.4. 33..66..55.. ППееррееххоодд оотт ввееррссииии 11..22 ддоо ввееррссииии 11..33 Версия 1.3 почти полностью обратно совместима с 1.2 со следующим исключением: Harvest 1.3 использует 3.0. Файлы _._g_l_i_m_p_s_e___* в каталоге брокера, созданные при помощи Harvest 1.2 (Glimpse 2.0), 1. Закрыть все запущенные брокеры. 2. Выполнить rm .glimpse_* в каталогах каждого брокера. 3. Перезапустить ваши брокеры командой RunBroker. 4. Выполните полное индексирование при помощи интерфейса _a_d_m_i_n_._h_t_m_l. 33..66..66.. ППееррееххоодд оотт ввееррссииии 11..11 ддоо ввееррссииии 11..22 Есть несколько несовместимостей между версиями Harvest 1.1 и 1.2. ╥ У Gatherer'а есть улучшенная поддержка возрастающего сбора, которая несовместима с версией 1.1. Для обновления вашего существующего Gatherer'а зайдите в _к_а_т_а_л_о_г _д_а_н_н_ы_х Gatherer'а (обычно подкаталог _d_a_t_a) и запустите следующую команду: % set path = ($HARVEST_HOME/lib/gatherer $path) % cd data % rm -f INDEX.gdbm % mkindex Должны создаться файлы _I_N_D_E_X_._g_d_b_m и _M_D_5_._g_d_b_m в текущем каталоге. ╥ У Broker'а есть новый формат логов для файла _a_d_m_i_n_/_L_O_G, который несовместим с версией 1.1. 33..66..77.. ППееррееххоодд кк ввееррссииии 11..11 сс ввееррссииии 11..00 ииллии ббооллееее рраанннниихх ввееррссиийй Если у вас уже установлена более рання версия Harvest, и вы хотите ее обновить, то _н_е_л_ь_з_я распаковывать новый дистрибутив поверх старого. Например, изменения версии 1.1 по сравнению с 1.0 включают некоторую реорганизацию исполняемых файлов, и, следовательно, простая установка версии 1.1 поверх версии 1.0 приведет в некоторых случаях к использованию старых исполняемых файлов. С другой стороны, возможно вы не захотите устанавливать с нуля новую версию, так как вы уже собрали и проиндексировали большое число данных. Вместо этого, для перехода с версии Harvest 1.0 до 1.1 проделайте следующее: 1. Переместите старую установку во временный каталог. 2. Установите новую версию, руководствуясь инструкцией, поставляемой с Harvest'ом. 3. Потом, для каждого Gatherer'а и Broker'а, которые вы запускали в старой инсталляции, переместите сервер на новую инсталляцию. GGaatthheerreerr''ыы:: необходимо переместить каталог Gatherer'а в _$_H_A_R_V_E_S_T___H_O_M_E_/_g_a_t_h_e_r_e_r_s. Раздел ``Описание RootNode'' показывает специфику загрузки Gatherer'а, если вы хотите внести изменения в конфигурационный файл вашего Gatherer'а. BBrrookkeerr''ыы:: необходимо переместить каталог Broker'а в _$_H_A_R_V_E_S_T___H_O_M_E_/_b_r_o_k_e_r_s. Возможно, вы захотите перестроить ваш брокер, используя CreateBroker, чтобы можно было использовать обновленный _q_u_e_r_y_._h_t_m_l и связанные с ним файлы. 33..77.. ЗЗааппуусскк ссииссттееммыы:: ккооммааннддаа RRuunnHHaarrvveesstt ии ссввяяззаанннныыее сс ннеейй ккооммааннддыы Простейший способ запуска системы Harvest - использовать команду RunHarvest. RunHarvest предлагает пользователю ответить на небольшой список вопросов о том, какие данные индексировать и проч., и затем создает и запускает Gatherer и Broker со стандартным (не настроенным) набором механизмов извлечения содержимого и индексирования. Имеется несколько более простых команд для запуска отдельных Gatherer'ов и Broker'ов (например, если вы хотите распределить процесс собирания). Команды запуска Harvest'а: RRuunnHHaarrvveesstt Проверяет, корректно ли установлено ПО Harvest, спрашивает у пользователя основную конфигурационную информацию и затем создает и запускает Gatherer и Broker. Если у вас установлена переменная _$_H_A_R_V_E_S_T___H_O_M_E, тогда команда использует ее; в противном случае она попытается определить _$_H_A_R_V_E_S_T___H_O_M_E автоматически. Находится в каталоге _$_H_A_R_V_E_S_T___H_O_M_E. RRuunnBBrrookkeerr Запускает Broker. Находится в каталоге Broker'а. RRuunnGGaatthheerreerr Запускает Gatherer. Находится в каталоге Gatherer'а. CCrreeaatteeBBrrookkeerr Создает отдельный Broker, который будет собирать свою информацию от других существующих Broker'ов или Gatherer'ов. Используется RunHarvest, или может быть запущена пользователем для создания нового брокера. Использует _$_H_A_R_V_E_S_T___H_O_M_E и по умолчанию _/_u_s_r_/_l_o_c_a_l_/_h_a_r_v_e_s_t. находится в каталоге _$_H_A_R_V_E_S_T___H_O_M_E_/_b_i_n. Не существует команды CreateGatherer, но команда RunHarvest может создать Gatherer, или вы можете создать Gatherer вручную (смотрите раздел ``Настройка распознавания типов, выбора кандидатов, представление разбора и суммирование'' или раздел ``Примеры Gatherer'ов''). Расположение каталогов и программ установлнного Harvest'а обсуждается в разделе ``Программы и размещение установленного ПО Harvest''. Среди всего прочего, команда RunHarvest спрашивает пользователя, какие порты использовать для Gatherer'а и Broker'а. По умолчанию Gatherer будет использовать 8500, а Broker -- порт Gatherer'а плюс 1. Выбор порта зависит от конкретной машины -- вам нужно выбрать порты, которые не используются другими серверами на вашей машине. Вы можете посмотреть в своем файле _/_e_t_c_/_s_e_r_v_i_c_e_s, какие порты используются (хотя в этом файле показано только несколько серверов; некоторые сервера используют порты, нигде не регистрируя этой информации). Обычно указанные выше порты не используются другими процессами. По-видимому, самый простой способ -- просто попытаться использовать порты, предлагаемые по умолчанию, и посмотреть, все ли работает. Остальная часть этого руководства предоставляет информацию для пользователей, которые хотят подстроить Harvest или сделать его использование более изощренным, чем при простом запуске RunHarvest. 33..88.. ККооннттааккттннааяя ииннффооррммаацциияя ккооммааннддыы ррааззррааббооттччииккоовв HHaarrvveesstt Если у вас есть вопросы о системе Harvest или проблемы с ПО, оставьте сообщение новостной группе USENET comp.infosystems.harvest . Пожалуйста, укажите тип вашего компьютера, операционную систему и версию Harvest в вашем письме. Если у вас есть исправления ошибок, порты к новым платформам или другие улучшения ПО, пожалуйста, отправьте email разработчику Harvest lee@arco.de . 44.. GGaatthheerreerr 44..11.. ООббззоорр Gatherer получает информационные ресурсы используя различные стандартные методы доступа (FTP, Gopher, HTTP, NNTP и локальные файлы), а затем суммирует эти ресурсы различными типизированными способами, чтобы создать структурированную индексную информацию. Например, Gatherer может получить технический отчет с FTP архива, а затем извлечь автора, заголовок и краткий обзор текста, чтобы создать резюме (summarize, далее для этого понятия будет использоваться термин ``суммировать'') технического отчета. Брокеры Harvest или другие поисковые сервисы могут затем получать индексную информацию от Gatherer'а для использования ее поисковом индексе, доступном через WWW интерфейс. Gatherer состоит из большого числа отдельных компонентов. Программа Gatherer считывает конфигурационный файл Gatherer'а и контролирует весь процесс нумерации и резюмирования объектов данных. Структурированная индексная информация, которую собирает Gatherer, представляется в виде списка пар "атрибут-значение" используя _Ф_о_р_м_а_т_о_м _в_з_а_и_м_о_о_б_м_е_н_о_в _р_е_з_ю_м_е _о_б_ъ_е_к_т_о_в _(_S_u_m_m_a_r_y _O_b_j_e_c_t _I_n_t_e_r_c_h_a_n_g_e _F_o_r_m_a_t _- SOIF, смотрите раздел ``The Summary Object Interchange Format (SOIF)''). Демон gatherd предоставляет базу данных Gatherer'а Broker"ам. Он запускается в фоновом режиме по завершении процесса собирания. Отдельная программа gather - это клиент для сервера gatherd. Она может использована с командной строки для тестирования и используется Broker'ом. Gatherer использует кэш на локальном диске для хранения полученных объектов. Дисковый кэш описывается в разделе ``Дисковый кэш''. Несмотря на то, что демон gatherd остается в фоновом режиме, Gatherer не обновляет автоматически свои резюмированные объекты. Каждый объект у Gatherer'а имеет значение Time-to-Live (``время жизни''). Объекты остаются в базе данных до тех пор, пока они не устареют. Смотрите в разделе ``Периодическое собирание и обновления в реальном времени'' дополнительную информацию по хранению Gatherer'ом обновленных объектов. Несколько примеров Gatherer'ов поставляются вместе с дистрибутивом с ПО Harvest (смотрите раздел ``Примеры Gatherer'ов''). 44..22.. ННааччааллььннааяя ууссттааннооввккаа Чтобы запустить основной Gatherer, вам нужен только список URL'ов (смотрите RFC1630 и RFC1738), из которых он будет собирать индексную информацию. Этот список указывается в конфигурационном файле Gatherer'а вместе с прочей опциональной информацией, такой как имя Gatherer'а и каталог, в котором он размещен (обратитесь в раздел ``#Задание значений переменных в конфигурационном файле Gatherer'а'' за деталями по опциональной информации). Ниже приведен пример конфигурационного файла Gatherer'а: # # sample.cf - Sample Gatherer Configuration File # Gatherer-Name: My Sample Harvest Gatherer Gatherer-Port: 8500 Top-Directory: /usr/local/harvest/gatherers/sample # Enter URLs for RootNodes here http://www.mozilla.org/ http://www.xfree86.org/ # Enter URLs for LeafNodes here http://www.arco.de/~kj/index.html Как показано в примере конфигурационного файла, можно классифицировать URL на RRoooottNNooddee и LLeeaaffNNooddee. Что касается LeafNode URL, Gatherer просто получает URL и обрабатывает его. LeafNode URL'ы - это обычно файлы как документы PostScript или сжатые дистрибутивы ``tar''. Gatherer разложит RootNode URL на ноль или более LeafNode URL'ов, рекурсивно нумеруя их способами, зависящими от метода доступа. Для FTP или Gopher Gatherer представит листинг рекурсивных каталогов на сервере FTP или Gopher для разложения RootNode (обычно имя каталога). Для HTTP RootNode URL разлагается следованием ссылкам HTML на другие URL'ы. Для News нумерация возвращает все сообщения в указанной новостной группе USENET. ПОЖАЛУЙСТА, БУДЬТЕ ОСТОРОЖНЫ при указании RootNode, так как можно задать гигантский объем работы одним лишь RootNode URL'ом. Чтобы предостеречь плохо сконфигурированный Gatherer от неправильного использования серверов, по умолчанию Gatherer разлагает RootNode на 250 LeafNode'ов, а также включает только те HTML линки, которые указывают на документы, которые находятся на том же сервере, что и оригинальный RootNode URL. Есть несколько опций, которые позволяют изменить эти ограничения и иным способом улучшить спецификации Gatherer'а. За деталями обратитесь к разделу ``Описание RootNode''. Gatherer - это ``robot'', он собирает URL'ы, начиная с URL'ов, указанных в RootNodes. Он следует соглашению _r_o_b_o_t_s_._t_x_t и _r_o_b_o_t_s _M_E_T_A _t_a_g. Он также поддерживает протокол HTTP версии 1.1 и отправляет поля _U_s_e_r_-_A_g_e_n_t и запросы _F_r_o_m серверам HTTP для идентификации. После того, как вы написали конфигурационный файл Gatherer'а, создайте каталог для Gatherer'а и скопируйте туда конфигурационный файл. Затем запустите программу Gatherer из командной строки с единственным аргументом -- именем конфигурационного файла, как показано ниже: % Gatherer GathName.cf Gatherer сгенерирует базу данных, содержащую резюме документов, log-файл (_l_o_g_._g_a_t_h_e_r_e_r) и log-файл с ошибками (_l_o_g_._e_r_r_o_r_s). Он также запустит демон gatherd, который автоматически поставляет индексную информацию брокерам и другим клиентам. Для просмотра экспортируемой индексной информации вы можете использовать клиентскую программу gather, как показано ниже: % gather localhost 8500 | more Опция --iinnffoo заставляет Gatherer выдавать только краткое описание документов в Gatherer'е, которое состоит из доступных в указанной базе данных Gatherer'а атрибутов, хоста и имени Gatherer'а, список времен обновлений объектов и числа объектов. По умолчанию установлена компрессия, но ее можно отменить опцией --nnooccoommpprreessss. Опциональная метка времени говорит Gatherer'у посылать только объекты, которые изменились со времени, указанном в метке (в секундах с начала ``эпохи'' UNIX - 1 января 1970г). 44..22..11.. ССббоорр ннооввооссттнныыхх UURRLL''оовв ((NNeewwss)) ппррии ппооммоощщии NNNNTTPP URL'ы News отличаются от других протоколов доступа, потому что URL в основном не содержит имени хоста. Gatherer получает новостные URL'ы от сервера NNTP. Имя сервера должно быть помещено в переменную окружения _$_N_N_T_P_S_E_R_V_E_R. Возможно, хорошая идея - добавить ее в ваш скрипт RunGatherer. Если переменная окружения не установлена, Gatherer попытается подсоединиться к хосту с именем _n_e_w_s на вашем сайте. 44..22..22.. ООччииссттккаа GGaatthheerreerr''аа Помните, что базы данных Gatherer'а продолжают существовать между запусками. Объекты остаются в в базе данных, пока не устареют. Эксперементируя с Gatherer'ом, всегда является хорошей идеей ``очистка'' базы данных между запусками. Проще всего это осуществить, выполнив команду из каталога Gatherer'а: % rm -rf data tmp log.* 44..33.. ООппииссааннииее RRoooottNNooddee Средства описания RootNode, описанные в разделе ``Начальная установка'', предоставляют основной набор действий нумерации RootNode по умолчанию. Обычно полезно нумеровать, не ограничиваясь пределами по умолчанию, например, чтобы увеличить пределы нумерации (больше 250 URL'ов) или чтобы позволить пересечение границ сайтов при нумерации линков HTML. Можно указать эти и другие аспекты нумерации следующим образом: URL EnumSpec URL EnumSpec ... где _E_n_u_m_S_p_e_c - одна строка (используя ``\\'' при переходе на новую строку) со следующим синтаксисом: URL=URL-Max[,URL-Filter-filename] \ Host=Host-Max[,Host-Filter-filename] \ Access=TypeList \ Delay=Seconds \ Depth=Number \ Enumeration=Enumeration-Program Все модификаторы _E_n_u_m_S_p_e_c опциональные и имеют следующие значения: UURRLL--MMaaxx Число, указываемое справа в выражении ``URL='' показывает максимальное число URL'ов LeafNode URLs, которые нужно сгенерировать на всех уровнях глубины индексации, начиная от текущего URL. Заметьте, что _U_R_L_-_M_a_x - это максимальное число URL'ов которые генерируются во время нумерации, а _н_е ограничение на то, сколько URL'ов может пройти через фазу выбора кандидата (смотрите раздел ``Настройка шага выбора кандидата''). UURRLL--FFiilltteerr--ffiilleennaammee Это имя файла, содержащего набор фильтров из регулярных выражений (смотрите раздел ``Фильтры RootNode'') для разрешения или запрета отдельных LeafNode при нумерации. По умолчанию используется фильтр _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_U_R_L_-_f_i_l_t_e_r_- _d_e_f_a_u_l_t, который исключает много изображений и звуковых файлов. HHoosstt--MMaaxx Число, указанное справа в выражении ``Host='' показывает максимальное число хостов, которое может быть использовано для нумерации RootNode. Хосты обычно подсчитываются по своим IP-адресам, таким образом хосты, имеющие несколько алиасов учитываются один раз. Но это не работает для хостов, имеющих несколько IP-адресов или хостов, DNS именами которых управляет какая-нибудь программа (например, для уравновешивания загрузки серверов). _З_а_м_е_ч_а_н_и_е_: До версии Harvest 1.2 строка ``Host=...'' называлась ``Site=...''. Мы изменили имя на ``Host='', потому что оно интуитивно более понятно (ограничение на число хостов, а не сайтов). Для совместимости с конфигурационными файлами старых Gatherer'ов мы будем продолжать использовать ``Site='' как алиас для ``Host=''. HHoosstt--FFiilltteerr--ffiilleennaammee Это имя файла, содержащего набор регулярных выражений - фильтров для разрешения или запрещения определенных хостов в нумерации. Каждое выражение может определять как имя хоста (или IP-адрес), так и номер порта (в случае, если у вас есть несколько серверов на различных портах одной машины, а вы хотите проиндексировать только один из них). Синтаксис - ``hostname:port''. AAcccceessss Если RootNode - это HTTP URL, тогда вы можете указать методы доступа, которыми нужно производить нумерацию. Возможные типы методов доступа: FFIILLEE,, FFTTPP,, GGoopphheerr,, HHTTTTPP,, NNeewwss,, TTeellnneett или WWAAIISS. Используйте символ ``||'' между именами типов для разрешения нескольких методов доступа. Например, ``AAcccceessss==HHTTTTPP||FFTTPP||GGoopphheerr'' зайдет на URL'ы HTTP, FTP и Gopher при нумерации HTTP URL'а RootNode. _З_а_м_е_ч_а_н_и_е_: Мы не поддерживаем перекрестные методы нумерации в Gopher, потому что трудно убедиться, что указатели Gopher не пересекают границ сайта. Например, URL Gopher _g_o_p_h_e_r_:_/_/_p_o_w_e_l_l_._c_s_._c_o_l_o_r_a_d_o_._e_d_u_:_7_0_0_5_/_1_f_t_p_3_a_f_t_p_._c_s_._w_a_s_h_i_n_g_t_o_n_._e_d_u_4_0_p_u_b_/ получит листинг каталога FTP ftp.cs.washington.edu:/pub, несмотря на то, что часть URL с именем хоста -- powell.cs.colorado.edu. DDeellaayy Это число секунд ожидания между контактами с серверами. По умолчанию оно равно одной секунде, если не указано другое. DDeellaayy==33 позволит Gatherer'у ждать 3 секунды между контактами. DDeepptthh Это максимальное число уровней нумерации (глубина) во время собирания информации. DDeepptthh==00 означает, что _н_е_т ограничений на глубину нумерации. DDeepptthh==11 означает, что будет получен указанный URL, а также все URL'ы, на которые есть ссылки в указанном URL'е; и так далее для более больших значений Depth. Другими словами, Gatherer будет следовать по ссылкам вплоть до _D_e_p_t_h шагов от указанного URL'а. EEnnuummeerraattiioonn--PPrrooggrraamm Этот модификатор добавляет очень удобный способ контролирования Gatherer'а. Enumeration-Program - это фильтр, который считываетs URL'ы, как входные параметры, и записывает новые параметры нумерации на выходе. Обратитесь к разделу ``Описание настраиваемой программы нумерации'' за отдельными деталями. По умолчанию, _U_R_L_-_M_a_x равно 250, _U_R_L_-_F_i_l_t_e_r не делает ограничений, _H_o_s_t_-_M_a_x равно 1, _H_o_s_t_-_F_i_l_t_e_r не делает ограничений, _A_c_c_e_s_s равен HTTP, _D_e_l_a_y равен 1 секунде, а _D_e_p_t_h равно нулю. Нет способа указать неограниченное значение для _U_R_L_-_M_a_x или _H_o_s_t_-_M_a_x. 44..33..11.. ФФииллььттррыы RRoooottNNooddee Файлы-фильтры используют стандартный синтаксис регулярных выражений UNIX (как определено стандартом POSIX), а не синтаксис csh. Например, нужно использовать ``.*abc'' для обозначения любой строки, заканчивающейся на ``abc'', но не ``*abc''. Файл-фильтр имеет следующий синтаксис: Deny regex Allow regex Регулярные выражения в _U_R_L_-_F_i_l_t_e_r сопостовляются только с той часьтю каждого URL, которая указывает путь (схема, имя хоста и порт не включаются). Например, следующий файл URL-Filter позволит нумеровать все URL'ы, кроме содержащих регулярное выражение ``_/_g_a_t_h_e_r_e_r_s_/'': Deny /gatherers/ Allow . Другое общее использование фильтров URL заключается в запрещении перехода Gatherer'а в вышестоящий каталог. Автоматически сгенерированные страницы HTML для HTTP и FTP каталогов часто содержат ссылку на родительский каталог ``_._.''. Чтобы держать Gatherer ниже указанного каталога, используйте файл фильтров URL следующим образом: Allow ^/my/cool/sutff/ Deny . Регулярные выражения _H_o_s_t_-_F_i_l_t_e_r сопоставляются по части ``hostname:port'' каждого URL. Из-за включения в выражение port, вы не можете использовать ``$$'' для выделения конца имени хоста. Начиная с версии 1.3, вместо имени хоста может быть указан IP-адрес. Адрес кдасса B, такой как 128.138.0.0 в регулярных выражениях должен быть написан в виде ``^^112288\\..113388\\....**''. Например: Deny bcn.boulder.co.us:8080 Deny bvsd.k12.co.us Allow ^128\.138\..* Deny . Важен порядок строк AAllllooww и DDeennyy, так как фильтры применяются последовательно от первой строки к последней. Так, например, если вы укажете сперва ``AAllllooww ..**'', никакие последующие выражения DDeennyy не будут обработаны, так как этот фильтр AAllllooww разрешит все записи. 44..33..22.. ООппииссааннииее ппррооггррааммыы ннууммееррааццииии Гибкая нумерация может быть достигнута указанием модификатора EEnnuummeerraattiioonn==EEnnuummeerraattiioonn--PPrrooggrraamm в RootNode URL. _E_n_u_m_e_r_a_t_i_o_n_-_P_r_o_g_r_a_m - это фильтр, который принимает на стандартный вход URL и записывает новые RootNode URL на стандартный выход. Выходной формат отличен от указываемого RootNode URL в конфигурационном файле Gatherer'а. Каждая выходная строка должна содержать девять полей, разделенных пробелами. Поля следующие: URL URL-Max URL-Filter-filename Host-Max Host-Filter-filename Access Delay Depth Enumeration-Program Это те же самые поля, которые описаны в разделе ``Описание RootNode''. Значения должны даваться в каждом поле. Используйте _/_d_e_v_/_n_u_l_l для отмены имен файлов URL-Filter и Host-Filter. Испольлзуйте /bin/false для отмены программы Enumeration. 44..33..33.. ППррииммеерр ккооннффииггууррааццииии RRoooottNNooddee Ниже приведен пример конфигурации RootNode: (1) http://harvest.cs.colorado.edu/ URL=100,MyFilter (2) http://www.cs.colorado.edu/ Host=50 Delay=60 (3) gopher://gopher.colorado.edu/ Depth=1 (4) file://powell.cs.colorado.edu/home/hardy/ Depth=2 (5) ftp://ftp.cs.colorado.edu/pub/cs/techreports/ Depth=1 (6) http://harvest.cs.colorado.edu/~hardy/hotlist.html \ Depth=1 Delay=60 (7) http://harvest.cs.colorado.edu/~hardy/ \ Depth=2 Access=HTTP|FTP Каждый из приведенных выше RootNode содержит различную конфигурации нумерации: 1. Этот RootNode будет собирать вплоть до 100 документов, которые пройдут через фильтры URL, содержащиеся в файле _M_y_F_i_l_t_e_r. 2. Этот RootNode соберет документы из первых 50 хостов, которые встретятся при нумерации указанного URL без ограничения на глубину ссылок. Он также будет ждать 60 секунд после получения каждого документа. 3. Этот RootNode соберет документы только с верхнего уровня сервера Gopher на _g_o_p_h_e_r_._c_o_l_o_r_a_d_o_._e_d_u. 4. Этот RootNode соберет все документы из каталога _/_h_o_m_e_/_h_a_r_d_y и всех подкаталогов _/_h_o_m_e_/_h_a_r_d_y. 5. Этот RootNode соберет документы только из каталога _/_p_u_b_/_t_e_c_h_r_e_p_o_r_t_s, который, в данном случае, содержит некоторые библиографические файлы, а не сами технические отчеты. 6. Этот RootNode соберет все документы, которые находятся в одном шаге от указанного URL с интервалом в 60 секунд. Это удобный способ индексирования вашего ``хотлиста''. Если создать файл HTML, содержащий такие ``горячие'' указатели, как этот RootNode, то процесс нумерации соберет страницы верхнего уровня для каждого указателя. 7. Этот RootNode соберет все документы, которые находятся не дальше, чем в двух шагах от указанного URL. Более того, он проследует и пронумерует любые HTTP и FTP ссылки, которые встретятся. 44..33..44.. ННууммеерраацциияя GGaatthheerreerr''аа ии ввыыббоорр ккааннддииддааттоовв Кроме использования файлов _U_R_L_-_F_i_l_t_e_r и _H_o_s_t_-_F_i_l_t_e_r в механизме определения RootNode, описанного в разделе ``Описание RootNode'', вы можете предотвратить индексацию документов, настроив файл _s_t_o_p_l_i_s_t_._c_f, описанный в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения представлений и суммирования''. Так как эти механизмы включаются в разное время, они могут иметь различные эффекты. Механизмы _U_R_L_-_F_i_l_t_e_r и _H_o_s_t_-_F_i_l_t_e_r вовлекаются программой Gatherer'а нумерации ``RootNode''. Использование этих фильтров, как стоп-списков, может предотвратить скачивание нежелаемых объектов через сеть. Это существенно может уменьшить время собирания и сетевой трафик. Файл _s_t_o_p_l_i_s_t_._c_f используется системой извлечения содержания _E_s_s_e_n_c_e (описана в разделе ``Извлечение данных для индексации: Подсистема суммирования Essence'') _п_о_с_л_е того, как объекты уже получены, чтобы выбрать, из каких объектов должно быть извлечено содержание и какие объекты должны быть проиндексированы. Это может быть полезным, так как Essence предоставляет более мощные средства отклонения кандидатов на индексацию, при помощи которых вы можете настроить выбор объектов не только на основе имен файлов, но и на основе их содержания (например, посмотрев на строчки в начале файла или на ``магические'' числа UNIX). Также можно использовать более сложные схемы группирования файлов (например, решив не извлекать содержание из файлов объектного кода, если доступен исходный код). В качестве примера комбинирования этих механизмов, предположим, что вы хотите проиндексировать файлы ``.ps'', имеющиеся на вашем WWW сайте. Вы можете сделать это, создав файл _s_t_o_p_l_i_s_t_._c_f, который содержит ``HTML'' и фильтр RootNode _U_R_L_-_F_i_l_t_e_r: Allow \.html Allow \.ps Deny .* В заключение, независимо от этих настроек, Gatherer попытается избежать скачивание объектов, где это возможно, используя кэш на локальном диске и заголоки HTTP запросв ``If-Modified-Since'' (если есть изменения с такого-то времени). Кэш на локальном диске описан в разделе ``Дисковый кэш''. 44..44.. ГГееннеерраацциияя LLeeaaffNNooddee//RRoooottNNooddee UURRLL''оовв иизз ппррооггррааммммыы Можно генерировать RootNode или LeafNode URL'ы автоматически из программы. Это может оказаться полезным, например, при собирании большого числа новостных групп Usenet. Пргорамма указывается в разделе RootNode или LeafNode, вместе с вертикальной чертой. |generate-news-urls.sh Скрипт должен выдавать правильные URL'ы, такие как news:comp.unix.voodoo news:rec.pets.birds http://www.nlanr.net/ ... В случае URL'ов RootNode, параметры нумерации могут быть заданы после программы. |my-fave-sites.pl Depth=1 URL=5000,url-filter 44..55.. ИИззввллееччееннииее ддаанннныыхх ддлляя ииннддееккссааццииии:: ППооддссииссттееммаа ссууммммиирроовваанниияя EEsssseennccee После того, как Gatherer получает документ, он пропускает его через подсистему, называемую _E_s_s_e_n_c_e, чтобы извлечь информацию для индекса. Essence позволяет Gatherer'у собирать этот индекс из большого разнообразия информации различными способами в зависимости от типа данных и потребностей данного индексируемого блока. В кратце, Essence может определить тип данных, на которые указывает URL (напрмер, PostScript или HTML), ``распутать'' форматы представления (такие как сжатые файлы ``tar''), выбрать, какой тип данных индексировать (например, не индексировать аудио файлы), и потом применить соответствующий алгоритм (называемый _s_u_m_m_a_r_i_z_e_r) для генерации резюме содержимого данных. Пользователи могут настроить каждый из этих аспектов, но зачастую в этом нет необходимости. Harvest распространяется со стандартным набором распозавателей типов, архиваторов (извлечение представлений), избирателей кандидатов и summarizer'ов, которые хорошо работают для большинства приложений. Ниже мы описываем стандартный набор summarizer'ов, компонент текущего дистрибутива, и как пользователи могут настроить summarizer'ы и добавить свои для новых типов данных. Если вы разрабатывате summarizer, который, вероятно, может быть полезен другим пользователям, пожалуйста, сообщите нам по e-mail'у на lee@arco.de , так что мы сможем включить его в наш дистрибутив Harvest'а. Тип Функция summarizer'а -------------------------------------------------------------------- Bibliographic Извлечение автора и заголовка Binary Извлечение смысловых строчек и резюме страниц руководства (manual page summary) C, CHeader Извлечение имен процедур, имен включенных файлов и комментариев Dvi Вызов summarizer'а текста на извлеченный ASCII текст FAQ, FullText, README Извлечение всех слов в файле Font Извлечение комментариев HTML Извлечение выделений, гиперссылок и выбраных полей LaTex Разбор выбраных полей LaTex (автор, заголовок и т.д.) Mail Извлечение определенных полей заголовка Makefile Извлечение комментариев и имен целей ManPage Извлечение резюме, автора, заголовка и т.д. на основе макроса ``-man'' News Извлечение определенных полей заголовка Object Извлечение таблицы символов Patch Извлечение имен ``пропаченых'' файлов Perl Извлечение имен процедур и комментариев PostScript Извлечение текста определенным обработчиком слов (word processor) и пропуск через summarizer текста. RCS, SCCS Извлечение revision control summary RTF Конвертирование в HTML и пропуск через HTML summarizer SGML Извлечение полей, названных в таблице извлечений ShellScript Извлечение комментариев SourceDistribution Извлечение полного текста файла README и комментариев из Makefile и файлов исходного кода, и суммирование всех man-страниц SymbolicLink Извлечение имени файла, владельца и даты создания TeX Вызов summarizer'а текста на извлеченный ASCII текст Text Извлечение первых 100 строк и первых предложений всех оставшихся абзацев Troff Извлечение автора, заголовка и т.д. на основе макропакетов ``-man'', ``-ms'', ``-me'', или извлечение заголовков разделов и тем. Unrecognized Извлечение имени файла, владельца и даты создания. 44..55..11.. ДДееййссттввиияя ссттааннддааррттнныыхх ssuummmmaarriizzeerr''оовв ппоо ууммооллччааннииюю Таблица в разделе ``Извлечение данных для индексации: Подсистема суммирования Essence'' снабжает короткой справкой о том, как документы суммируются в зависимости от их типа. Эти действия могут быть настроены, как обсуждалось в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''. Некоторые summarizer'ы реализованы как программы UNIX, в то время как другие выражаются регулярными выражениями; обртитесь в раздел ``Настройка шага суммирования'' или раздел ``Пример 4'' за информацией о том, как написать summarizer. 44..55..22.. ССууммммииррооввааннииее ддаанннныыхх SSGGMMLL Можно суммировать документы, которые удовлетворяют Стандартному обобщенному языку верстки (Standart Generalized Markup Language, SGML), для которого у вас есть Определение типа документа (Document Type Definition, DTD). HTML -- это на самом деле частное приложение SGML с соответствующим DTD. (HTML summarizer Harvest'а может использовать HTML DTD и наш механизм суммирования SGML, который предоставляет множество преимуществ; см. раздел ``HTML summarizer на основе SGML''.) SGML используется во все более увеличивающемся широком разнообразии приложений, например как формат для хранения данных для большого числа физических наук. Так как SGML позволяет документам иметь хорошую структуру, Harvest может суммировать документы SGML очень эффективно. Summarizer SGML (SGML.sum) использует программу sgmls Джеймса Кларка (James Clark) для разбора документов SGML. Парсеру нужен и DTD документа, и файл деклараций, который описывает допустимый набор символов. Программа SGML.sum использует таблицу, которая сопоставляет тэги SGML с атрибутами SOIF. 44..55..22..11.. РРааззммеещщееннииее ввссппооммооггааттееллььнныыхх ффааййллоовв Вспомогательные файлы SGML можно найти в _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_-_l_i_b_/. Например, вот пути по умолчанию для суммирования HTML, используя механизм суммирования SGML: $HARVEST_HOME/lib/gatherer/sgmls-lib/HTML/html.dtd $HARVEST_HOME/lib/gatherer/sgmls-lib/HTML/HTML.decl $HARVEST_HOME/lib/gatherer/sgmls-lib/HTML/HTML.sum.tbl Размещение файла DTD должно быть указано в каталоге sgmls (_$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_-_l_i_b_/_c_a_t_a_l_o_g). Например: DOCTYPE HTML HTML/html.dtd Программа SGML.sum ищет файл _._d_e_c_l, используя путь по умолчанию. Другой путь может быть указан SGML.sum опцией --dd. Summarizer ищет файл _._s_u_m_._t_b_l сначала в каталоге Gatherer'а lib, а потом по пути по умолчанию. Свой путь можно указать SGML.sum опцией --tt. 44..55..22..22.. ТТааббллииццаа ссооооттввееттссттввиийй SSGGMMLL -- SSOOIIFF Таблица перевода снабжает простым, но мощным средством указания, как документ SGML должен быть суммирован. Есть четыре способа сопоставить данные SGML с SOIF. Первые два касаются помещения содержания (_c_o_n_t_e_n_t) тэга SGML в атрибут SOIF. Простое сопоставление SGML и SOIF выглядит примерно так: soif1,soif2,... Оно помещает все, что находится между тэгами ``TAG'' в атрибуты SOIF ``soif1'' и ``soif2''. Можно выбрать различные атрибуты SOIF на основе значений атрибутов SGML. Например, если ``ATT'' - атрибут тэга ``TAG'', то надо написать так: x-stuff y-stuff stuff Два других способа заключаются в помещении атрибутов SGML в атрибуты SOIF. Чтобы поместить значения атрибута ``ATT'' тэга ``TAG'' в атрибут SOIF ``att-stuff'' нужно написать: att-stuff Также можно поместить значение атрибута SGML в атрибут SOIF, используя другой атрибут SOIF: $ATT2 Когда summarizer встречает атрибут SGML, не занесенный в таблицу, содержимое отнесется к родительскому тэгу и станет частью содержимого родительского тэга. Чтобы _н_е обрабатывать содержимое какого-то тэга, укажите атрибут SOIF как ``ignore''. Чтобы содержимое некоторого тэга было рассмотрено также и в родительском тэге в дополнение к помещению в свой атрибут SOIF, занесите в таблицу дополнительный атрибут SOIF под названием ``parent''. Обратитесь в раздел ``HTML summarizer на основе SGML'' за примерами таких сопоставлений. 44..55..22..33.. ООшшииббккии ии ппррееддууппрреежжддеенниияя ппааррссеерраа SSGGMMLL Парсер sgmls может генерировать большой объем сообщений об ошибках и предупреждениях. Это в особенности справедливо для документов HTML, находящихся в Internet, которые часто не соответствуют строгому DTD HTML. По умолчанию, ошибки и предупреждения направляются в _/_d_e_v_/_n_u_l_l так что они не будут засорять логи Gatherer'а. Чтобы включить эти сообщения в логи, отредактируйте Perl скрипт SGML.sum и установите $$ssyynnttaaxx__cchheecckk == 11. 44..55..22..44.. ССооззддааннииее ssuummmmaarriizzeerr''аа ддлляя ннооввыыхх ттииппоовв ддаанннныыхх SSGGMMLL Чтобы создать summarizer SGML для новых типов данных SGML с соответствующим DTD, вам нужно сделать следующее: 1. Напишите скрипт оболочки shell под именем FOO.sum, который просто содержит #!/bin/sh exec SGML.sum FOO $* 2. Модифицируйте конфигурационные файлы essence (как описано в разделе ``Настройка шага распознавания типов''), чтобы ваш документ был понят как тип FOO. 3. Создайте каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_-_l_i_b_/_F_O_O_/ и скопируйте туда DTD и файл деклараций как FOO.dtd и FOO.decl. Отредактируйте _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_-_l_i_b_/_c_a_t_a_l_o_g и добавьте туда FOO.dtd. 4. Создайте таблицу переводов FOO.sum.tbl и поместите ее вместе с DTD в _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_-_l_i_b_/_F_O_O_/. Теперь можно протестировать все из командной строки: % FOO.sum myfile.foo 44..55..22..55.. HHTTMMLL ssuummmmaarriizzeerr ннаа ооссннооввее SSGGMMLL Harvest может суммировать HTML, используя свой SGML summarizer, описанный в разделе ``Суммирование данных SGML''. Преимущество такого подхода заключается в том, что summarizer более просто настраивается, и удовлетворяет хорошо продуманной модели SGML (где вы можете определить DTD для отдельных типов документов и создать интерпретирующее для понимания DTD, а не отдельных типов документов). Минус в том, что теперь summarizer более придирчив к синтаксису, а большинство документов Web синтаксически не корректны. Из=за такой придирчивости, по умолчанию для HTML отключена выдача результатов проверки синтаксиса. Если ваши документы так плохо организованы, что запутывают парсер, это может означать, что процесс суммирования бесцеремонно умирает. Если вы обнаружите, что ваши документы HTML не суммировались или суммировались частично, вы можете включить выдачу результатов проверки синтаксиса, установив $$ssyynnttaaxx__cchheecckk == 11 в $HARVEST_HOME/lib/gatherer/SGML.sum. Это позволит вам увидеть, какие документы неправильные и где-именно. Отметим, что частично причина данной проблемы состоит в том, что броузеры Web не настаивают на хорошей организации документов. Так что пользователи могут просто создавать документы, которые не совсем корректны, но отображаются нормально. Ниже приведена таблица SGML-SOIF, используемая по умолчанию HTML summarizer'ом: Элемент HTML Атрибуты SOIF ------------ ----------------------- keywords,parent url-references
address keywords,parent body references ignore keywords,parent

headings

headings

headings

headings

headings
headings head keywords,parent images $NAME keywords,parent title <TT> keywords,parent <UL> keywords,parent Путь к этому файлу -- _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_s_g_m_l_s_- _l_i_b_/_H_T_M_L_/_H_T_M_L_._s_u_m_._t_b_l. Отдельные Gatherer'ы могут производить настроенное суммирование HTML, если поместить модифицированную версию этого файла в каталог Gatherer'а _l_i_b. Другой способ настройки -- модифицировать скрипт HTML.sum и добавить опцию --tt команде SGML.sum. Например: SGML.sum -t $HARVEST_HOME/lib/my-HTML.table HTML $* В HTML заголовок документа записывается так: <TITLE>My Home Page Выше приведенная таблица переводов поместит резюме SOIF так: title{13}: My Home Page Отметим, что ``keywords,parent'' встречаются в таблице часто. Для любого выделенного текста (жирный, курсив, гиперссылки и т.д.), слова будут скопированы в атрибут keywords (ключевые слова) и также останутся в содержимом родительского элемента. Так сохраняется тело читаемого текста, и определенные слова не удаляются. Любой текст, который появляется внутри пары тэгов CODE, не будет показан в резюме, так как мы указали ``ignore'' в качестве атрибута SOIF. URL'ы в HTML записываются так: Указание <> в таблице переводов занесет URL в атрибут SOIF как: url-references{32}: http://harvest.cs.colorado.edu/ 44..55..22..66.. ДДооббааввллееннииее MMEETTAA ддаанннныыхх вв вваашш HHTTMMLL Один из наиболее полезных тэгов HTML- META. Он позволяет автору документа включить произвольные метаданные в документ HTML. Типичное применение элемента META: Указав ``<> $NAME'' в таблице переводов, вы получите: author{15}: Joe T. Slacker Используя тэги META, авторы HTML могут легко добавть список ключевых слов в свои документы: 44..55..22..77.. ДДррууггииее ппррииммееррыы Очень короткий summarizer HTML может быть создан таблицей, которая только помещает выделенные слова в атрибут ключевых слов keywords: Элемент HTML Атрибуты SOIF ------------ ----------------------- keywords keywords keywords

keywords

keywords

keywords keywords $NAME keywords title,keywords <TT> keywords Наоборот, полнотекстовый summarizer можно легко сделать так: Элемент HTML Атрибуты SOIF ------------ ----------------------- <HTML> full-text <TITLE> title,parent 44..55..33.. ННаассттррооййккаа шшааггоовв рраассппооззннаавваанниияя ттииппоовв,, ввыыббоорраа ккааннддииддааттоовв,, ииззввллееччеенниияя ппррддссттааввллеенниийй ии ссууммммиирроовваанниияя Действия Gatherer'а определяются набором конфигурационных файлов, утилит и соответствующим набором исполняемых программ, на которые ссылаются конфигурационные файлы. Если вы хотите настроить Gatherer, вам нужно создать подкаталоги _b_i_n и _l_i_b в каталоге, где вы запускаете Gatherer, а потом скопировать _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_*_._c_f и _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r_/_m_a_g_i_c в ваш каталог _l_i_b. Потом добавьте в конфигурационный файл вашего Gatherer'а: Lib-Directory: lib Ниже описаны детали о том, что делает каждый из этих файлов. Основное содержание типичного каталога Gatherer'а следующее (отметим: некоторые имена файлов ниже можно изменить, установив переменные в конфигурационнм файле Gatherer'а, как описано в разделе ``Задание значений переменных в конфигурационном файле Gatherer'а''): RunGatherd* bin/ GathName.cf log.errors tmp/ RunGatherer* data/ lib/ log.gatherer bin: MyNewType.sum* data: All-Templates.gz INFO.soif PRODUCTION.gdbm gatherd.log INDEX.gdbm MD5.gdbm gatherd.cf lib: bycontent.cf byurl.cf quick-sum.cf byname.cf magic stoplist.cf tmp: RunGatherd и RunGatherer используются, чтобы экспортировать базу данных Gatherer'а после перезапучка машины и запуска Gatherer'а,соответственно. Файлы _l_o_g_._e_r_r_o_r_s и _l_o_g_._g_a_t_h_e_r_e_r содержат сообщения об ошибках и вывод программы _E_s_s_e_n_c_e, соответственно (Essence будет коротко описан). Файл _G_a_t_h_N_a_m_e_._c_f - это конфигурационный файл Gatherer'а. Каталог _b_i_n содержит все summarizer'ы и другие программы, которые нужны summarizer'ам. Если бы вам нужно было настроить Gatherer, добавив summarizer, вам нужно было бы поместить соответствующие программы в этот каталог _b_i_n; MyNewType.sum - пример. Каталог _d_a_t_a содержит базу данных Gatherer'а, которую экспортирует gatherd. База данных Gatherer'а состоит из файлов _A_l_l_-_T_e_m_p_l_a_t_e_s_._g_z_, _I_N_D_E_X_._g_d_b_m_, _I_N_F_O_._s_o_i_f_, _M_D_5_._g_d_b_m и _P_R_O_D_U_C_T_I_O_N_._g_d_b_m. Файл _g_a_t_h_e_r_d_._c_f используется для поддержки контроля доступа, что описано в разделе ``Контроль доступа к базе данных Gatherer'а''. В файл _g_a_t_h_e_r_d_._l_o_g программа gatherd заносит свою информацию (логи). Каталог _l_i_b содержит конфигурационные файлы, используемы подсистемами Gatherer'а, а именно Essence. Эти файлы коротко описаны в следующей таблице: bycontent.cf Эвристика разбора содержания для распознавания типов byname.cf содержит эвристики для распознавания типов по именам файлов byurl.cf содержит эвристики для распознавания типов по URL magic инструкции команды ``file'' UNIX (соотвествующие строкам bycontent.cf) quick-sum.cf Извлекает атрибуты на шаге суммирования stoplist.cf содержит типы файлов, которые нужно отклонить на шаге выбора кандидатов 44..55..33..11.. ННаассттррооййккаа шшааггаа рраассппооззннаавваанниияя ттииппоовв Essence распознает типы тремя способами (в порядке приоритета): по названиям URL, по названиям файлов и определяя _и_д_е_н_ц_и_ф_и_ц_и_р_у_ю_щ_и_е данные в файле, используя команду (file) UNIX. Чтобы изменить шаг распознавания типов, отредактируйте _l_i_b_/_b_y_n_a_m_e_._c_f для добавления эвристики по имени файла, или _l_i_b_/_b_y_u_r_l_._c_f для добавления эвристики по URL, или _l_i_b_/_b_y_c_o_n_t_e_n_t_._c_f для добавления эвристики по содержимому. Эвристика по содержимому согласовывается с выходом комманды file, так что возможно также понадобится отредактировать файл _l_i_b_/_m_a_g_i_c. Обратитесь в разделы ``Пример 3'' и ``Пример 4'' за подробными примерами, как настроить шаг распознавания типов. 44..55..33..22.. ННаассттррооййккаа шшааггаа ввыыббоорраа ккааннддииддааттоовв Конфигурационный файл _l_i_b_/_s_t_o_p_l_i_s_t_._c_f содержит список типов, которые отклоняются Essence. Вы можете добавить или удалить некоторые типы из _l_i_b_/_s_t_o_p_l_i_s_t_._c_f для контроля шага выбора кандидатов. Чтобы направить Essence индексировать только определенные типы, вы можете составить список типов для индексирования в _l_i_b_/_a_l_l_o_w_l_i_s_t_._c_f. Потом укажите Essence флаг ----aalllloowwlliisstt. Эвристики по именам файлов и URL, используемые на шаге распознавания типов (описано в разделе ``Настройка шага распознавания типов''), в особенности полезны для выбора кандидаьов при собирании удаленных данных. Они позволяют Gatherer'у избежать получение файлов, которые вы не хотите индексировать (в отличие от этого распознавание типов определением иденцифицирующих данных внутри фалйа требует сначала получение файла). Такой подход может сохранить достаточно много сетевого трафика, особенно при индексировании _R_o_o_t_N_o_d_e URL'ов. Например, много сайтов предлагают свои файлы как в сжатом, так и не в сжатом виде. Создав _l_i_b_/_a_l_l_o_w_l_i_s_t_._c_f, содержащий только сжатые типы, вы сможете избежать получение несжатых версий файлов. 44..55..33..33.. ННаассттррооййккаа шшааггаа ииззввллееччеенниияя ппррееддссттааввллеенниийй Некоторые типы объявлены как ``уплотненные'' (nested). Essence трактует их не так, как другие типы, он запускает алгоритм извлечения представлений или ``Exploder'' лдя этих данных, а не Summarizer. На данный момент Essence может работать с файлами, сжатыми в следующих форматах: 1. binhex 2. uuencode 3. shell archive (``shar'') 4. tape archive (``tar'') 5. bzip2 compressed (``bzip2'') 6. compressed 7. GNU compressed (``gzip'') 8. zip compressed archive Чтобы настроить щаг извлечения представлений, вы можете модифицировать исходный файл Essence _s_r_c_/_g_a_t_h_e_r_e_r_/_e_s_s_e_n_c_e_/_u_n_n_e_s_t_._c. Этот файл выдает список доступных кодировок представления, а также указывает алгоритм расжатия. Обычно используется внешняя программа для раскрывания файла в один или более файлов-компонент (например bzip2, gunzip, uudecode, и tar). _E_x_p_l_o_d_e_r также можно использовать для преобразования файла в поток объектов SOIF. Программа Exploder принимает URL как первый аргумент в командной строке и файл, содержащий данные, как второй аргумент, а потом генерирует один или более объектов SOIF на выходе. Для вашего удобства, тип _E_x_p_l_o_d_e_r уже определен как уплотненный тип (nested type). Для сохранения некоторго времени вы можете использовать этот тип и соответствующую программу Exploder.unnest, а не модифицировать код Essence. Обратитесь в раздел ``Пример 2'' за подробным примером по написанию Exploder'а. Файл _u_n_n_e_s_t_._c также содержит информацию по определению алгоритмов расжатия. 44..55..33..44.. ННаассттррооййккаа шшааггаа ссууммммиирроовваанниияя Essence поддерживает два механизма для определения алгоритмов извлечения по типу (называемые _S_u_m_m_a_r_i_z_e_r_'_а_м_и), которые генерируют резюме содержимого (summaries): программа UNIX, которая принимает имя файла для суммированя в качестве одного аргумента в командной строке, и регулярные выражения, указанные в _l_i_b_/_q_u_i_c_k_-_s_u_m_._c_f. Обратитесь в раздел ``Пример 4'' за подробными примерами, как определять оба типа Summarizer'ов. Summarizer'ы UNIX принято называть TypeName.sum (например, PostScript.sum). Эти Summarizer'ы выдают на выходе резюме содержимого в виде списка атрибут SOIF - значение (см. раздел ``Формат взаимообмена краткими изложениями документов (SOIF)''). Вы можете использовать команду wrapit для облечения сырой выход в формат SOIF (т.е., для расстановки разграничителей на отдельные пары атрибут-значение). Есть summarizer, называемый FullText.sum, который вы можете использовать для представления полнотекстового индексирования выбранного типа файлов просто заставив конфигурационные файлы _l_i_b_/_b_y_c_o_n_t_e_n_t_._c_f и _l_i_b_/_b_y_n_a_m_e_._c_f распознавать желаемые типы файлов как FullText (т.е., напишите ``FullText'' напротив соответствующего регулярного выражения). 44..66.. ППоосстт--ссууммммииррооввааннииее:: ннаассттррооййккаа ррееззююммее ооббъъееккттоовв ((oobbjjeecctt ssuummmmaarriieess)) ппоо ппррааввииллаамм Возможна ``тонкая настройка'' резюме, сгенерированных summarizer'ами Essence. Типичным приложением этого может быть изменение атрибута _T_i_m_e_-_t_o_-_L_i_v_e (время жизни), основанного на некоторых сведениях о объекте. Так, администратор может использовать свойства пост-суммирования и дать быстро меняющимся объектам малый TTL, а очень стабильным документам - большой TTL. Объекты выбираются для пост-суммирования, если они удовлетворяют указанным условиям. Условие состоит из трех частей: имя атрибута, оператор, и некоторая строка данных. Например: some string data. For example: city == 'New York' В этом случае мы проверяем, равен ли атрибут _c_i_t_y строке ``New York''. Для точного совпадения строк, строка должна быть заключена в одинарные кавычки. Также поддерживаются регулярные выражения: city ~ /New York/ Также поддерживаются отрицательные операторы: city != 'New York' city !~ /New York/ Условия могут быть объединены операторами `&&&&' (логическое ``И'') или `||||' (логическое ``ИЛИ''): city == 'New York' && state != 'NY'; Если объект удовлетворяет всем условиям, над ним выполняется несколько инструкций. Можно указать четыре типа инструкций: 1. Установить атрибуту точно заданное значение. Например: time-to-live = "86400" 2. Отфильтровать атрибут какой-нибудь программой. Значение атрибута подается на вход фильтра. Фильтр выдает новое значение атрибута. Например: keywords | tr A-Z a-z 3. Отфильтровать множественные атрибуты программой. В этом случае фильтр должен прочитать и записать атрибуты в формате SOIF. Например: address,city,state,zip ! cleanup-address.pl 4. Особый случай инструкций - удалить объект. Чтобы сделать это, напишите просто: delete() 44..66..11.. ФФааййлл ппррааввиилл Условия и инструкции объединены вместе в файле правил (``rules'' file). Формат этого файла чем-то напоминает формат файла Makefile; условия начинаются в первой колонке, а инструкции отделяются табуляцией. Например: type == 'HTML' partial-text | cleanup-html-text.pl URL ~ /users/ time-to-live = "86400" partial-text ! extract-owner.sh type == 'SOIFStream' delete() Файл правил указывается в файле gatherer.cf при помощи тэга Post- Summarizing, например: Post-Summarizing: lib/myrules 44..66..22.. RReewwrriittiinngg UURRLLss До версии 1.4 невозможно было переписать часть резюме, содержащую URL. Сейчас это возможно, но только при помощи инструкции ``pipe''. Это может оказаться полезным для людей, желающих запустить Gatherer для URL'ов типа _f_i_l_e_:_/_/, но которые должны показываться как _h_t_t_p_:_/_/. Сделать это можно с таким правилом пост-суммирования как: url ~ 'file://localhost/web/htdocs/' url | fix-url.pl А скрипт `fix-url.pl' может выглядеть так: #!/usr/local/bin/perl -p s'file://localhost/web/htdocs/'http://www.my.domain/'; 44..77.. ААддммииннииссттррииррооввааннииее GGaatthheerreerr''аа 44..77..11.. ЗЗааддааннииее ззннааччеенниийй ппееррееммеенннныыхх вв ккооннффииггууррааццииоонннноомм ффааййллее GGaatthh╜╜ eerreerr''аа Кроме настроек, описанных в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования'', вы можете настроить Gatherer, установив переменные в конфигурационном файле Gatherer'а. Этот файл состоит из двух частей: список переменных, которые указывают информацию о Gatherer'е (такую как его имя, хост, и номер порта), и два списка URL (разделенных на RRoooottNNooddeess и LLeeaaffNNooddeess), из которых нужно собирать индексируемую информацию. Раздел ``Начальная установка'' содержит пример конфигурационного файла Gatherer'а. В этом разделе мы сосредоточим внимание на переменных, которые может установить пользователь в первой части конфигурационного файла Gatherer'а. Название каждой переменной начинается в первой колонке, заканчивается двоеточием, потом следует значение. Следующая таблица показывает поддерживаемые переменные: Access-Delay: Задержка по умолчанию между доступами к URL. Data-Directory: Каталог, куда записывается база данных GDBM. Debug-Options: Опции отладчтка, передаваемые дочерним программам. Errorlog-File: Файл для записи ошибок. Essence-Options: Любые дополнительные опции для программы Essence. FTP-Auth: Имя пользователя/пароль для защищенных документов FTP. Gatherd-Inetd: Обознчает, что gatherd запущен из inetd. Gatherer-Host: Полное имя хоста, на котором запущен Gatherer. Gatherer-Name: Униакльное имя Gatherer'а. Gatherer-Options: Дополнительные опции для Gatherer'а. Gatherer-Port: Номер порта для демона gatherd. Gatherer-Version: Версия Gatherer'а. HTTP-Basic-Auth: Имя пользователя/пароль для защищенных документов HTTP. HTTP-Proxy: хост:порт вашего HTTP прокси. Keep-Cache: ``yes'', чтобы не удалять кэш на локальном диске. Lib-Directory: Каталог, в котором "живут" конфигурационные файлы. Local-Mapping: Преобразование информации для локального собирания. Log-File: Файл для записи логов. Post-Summarizing: Файл правил для пост-суммирования. Refresh-Rate: Скорость обновления объектов в секундах, по умолчанию 1 неделя. Time-To-Live: Время жизни объектов в секундах, по умолчанию 1 месяц. Top-Directory: Каталог верхнего уровня для Gatherer'а. Working-Directory: Каталог для временных файлов (tmp) и локального кэша. Замечания: ╥ Мы рекомендуем вам использовать переменную TToopp--DDiirreeccttoorryy, так как она установит переменные DDaattaa--DDiirreeccttoorryy, LLiibb--DDiirreeccttoorryy и WWoorrkkiinngg-- DDiirreeccttoorryy. ╥ И WWoorrkkiinngg--DDiirreeccttoorryy, и DDaattaa--DDiirreeccttoorryy будут иметь файлы после запуска Gatherer'а. WWoorrkkiinngg--DDiirreeccttoorryy будет хранить локальный кэш, который использует Gatherer для уменьшения сетевого трафика, а DDaattaa--DDiirreeccttoorryy будет хранить базы данных GDBM, которые хранят содержимое резюме. ╥ Следует использовать полные, а не относительные имена каталогов. ╥ Все определения переменных _д_о_л_ж_н_ы быть сделаны перед URL'ами RootNode и LeafNode. ╥ Любая строка, начинающаяся с ``#'' - комментарий. ╥ LLooccaall--MMaappppiinngg обсуждается в разделе ``Собирание на локальной файловой системе для сниженной загрузки процессора''. ╥ HHTTTTPP--PPrrooxxyy будет получать URL'ы HTTP через прокси сервер. Синтаксис следующий: hhoossttnnaammee::ppoorrtt; например, pprrooxxyy..yyoouurrssiittee..ccoomm::33112288. ╥ Опция EEsssseennccee--OOppttiioonnss особенно полезна, так как позволяет легко настроить основные аспекты Gatherer'а. ╥ Единственная действительная опция GGaatthheerreerr--OOppttiioonnss -- ----ssaavvee--ssppaaccee, которая указывает Gatherer'у быть более эффективным с местом на диске при подготовке своей базы данных для экспорта. ╥ Программа Gatherer примет флаг --bbaacckkggrroouunndd, который заставит Gatherer запуститься в фоновом режиме. Опции Essence: Опция Значение -------------------------------------------------------------------- --allowlist filename Файл со списком допустимых типов --fake-md5s Генерирует MD5 для объектов SOIF из программы .unnest --fast-summarizing Увеличивает скорость за счет согласованности данных. Используйте только, когда уверены, что внешний summarizer будет генерировать чистые, уникальные атрибуты. --full-text Использует весь файл вместо резюме. Также вы можете получить полный текст, индексируя отдельные типы файлов, используя summarizer FullText.sum. --max-deletions n Число удалений GDBM перед реорганизацией --minimal-bookkeeping Генерирует минимальное число атрибутов учета системных ресурсов --no-access Не читать содержимое объектов --no-keywords Не генерировать ключевые слова автоматически --stoplist filename Файл со списком типов, которые подлежат удалению --type-only Только типы данных; не суммировать объекты Особенное замечание о полнотекстовом суммировании: Использование опции Essence ----ffuullll--tteexxtt запрещает файлам проходить через механизм извлечения содержания Essence. Вместо этого, все содержимое файлов включается в поток резюме SOIF. В некоторых случаях это может привести к нежелательным результатам (например, программа сразу включит PostScript, а не пропустит сначала его через переводчик данных из PostScript в текст, предоставляя несколько терминов, поддающихся поиску, и большие объекты SOIF). Использование механизма суммирования отдельных типов файлов, описанное в разделе ``Настройка шага суммирования'', будет лучше работать в этом случае, но потребует от вас указать, как должны извлекаться данные для каждого отдельного типа файлов. В следующих версиях Harvest мы заменим опцию Essence ----ffuullll-- tteexxtt, чтобы выполнять извлечение содержимого перед включением полного текста документов. 44..77..22.. ССооббииррааннииее ннаа ллооккааллььнноойй ффааййллооввоойй ссииссттееммее ддлляя сснниижжеенннноойй ззааггррууззккии ппррооццеессссоорраа Хотя рабочая нагрузка Gatherer'а определяется указываемыми URL'ами, часто собираемые файлы размещены в локальной файловой системе. В этом случае гораздо более эффективно собирать прямо с файловой системы, а не через FTP/Gopher/HTTP/News, в основном потому, что все требуемые порождаемые процессы UNIX должны собирать информацию через сетевые процессы. Например, наши измерения показывают, что процессор нагружен в 4-7 раз больше при собирании с FTP, чем прямо с локальной файловой системы. Для больших коллекций (например, архивные сайты, содержащие тысячи файлов), выигрыш процессорного времени может быть значительным. Начиная с версии 1.1 Harvest'а стало возможным указать Gatherer'у, как транслировать URL'ы в имена локальной файловой системы, используя переменную LLooccaall--MMaappppiinngg конфигурационного файла Gatherer'а (см. раздел ``Задание значений переменных в конфигурационном файле Gatherer'а''. Синтаксис: Local-Mapping: URL_prefix local_path_prefix Это заставит во время сбора транслироваться все URL'ы, начинающиеся с UURRLL__pprreeffiixx, в файлы, начинающиеся с llooccaall__ppaatthh__pprreeffiixx, но в результатах запросов будут оставаться URL'ы (поэтому объекты могут быть получены как обычно). Заметьте, что регулярные выражения здесь не поддерживаются. Например, указание Local-Mapping: http://harvest.cs.colorado.edu/~hardy/ /homes/hardy/public_html/ Local-Mapping: ftp://ftp.cs.colorado.edu/pub/cs/ /cs/ftp/ заставит URL _h_t_t_p_:_/_/_h_a_r_v_e_s_t_._c_s_._c_o_l_o_r_a_d_o_._e_d_u_/ _h_a_r_d_y_/_H_o_m_e_._h_t_m_l транслироваться в локальное файловое имя _/_h_o_m_e_s_/_h_a_r_d_y_/_p_u_b_l_i_c___h_t_m_l_/_H_o_m_e_._h_t_m_l, а URL _f_t_p_:_/_/_f_t_p_._c_s_._c_o_l_o_r_a_d_o_._e_d_u_/_p_u_b_/_c_s_/_t_e_c_h_r_e_p_o_r_t_s_/_s_c_h_w_a_r_t_z_/_H_a_r_v_e_s_t_._C_o_n_f_._p_s_._Z будет транслирован в имя _/_c_s_/_f_t_p_/_t_e_c_h_r_e_p_o_r_t_s_/_s_c_h_w_a_r_t_z_/_H_a_r_v_e_s_t_._C_o_n_f_._p_s_._Z. Локальное собирание будет работать с фаловой системой NFS. Локальное транслирование не удастся, если: локальные файлы не могут быть открыты для чтения; локальный файл - не регулярный файл (например, ссылка); у локального файла установлены биты на исполнение. Так, к каталогам, символическим ссылкам и сценариям CGI всегда обращается сервер, а не локальная файловая система. Наконец, Gatherer не предоставляет никаких преобразований синтаксиса URL для локального транслирования. Если ваш URL содержит управляющие символы (см. RFC1738), тогда локальное преобразование не удастся. Начиная с версии 1.4 (patchlevel 2) Essence печатает _[_L_] после каждого URL, который был удачно обработан локально. Заметье, что если ваша сеть сильно загружена, на самом деле может оказаться быстрее собрать через HTTP/FTP/Gopher, чем по NFS, так как NFS становится очень неэффективным в сильно нагруженных сетях. Гораздо лучше запускать свои Gatherer'ы на хостах на их собственных дисках и обращаться к ним прямо через локальную файловую систему. 44..77..33.. ССооббииррааннииее сс ссееррввеерроовв,, ззаащщиищщеенннныыхх ппааррооллеемм Вы можете собирать документы, защищенные паролем, с серверов HTTP и FTP. В обоих случаях, вы можете указать имя пользователя и пароль как часть URL. Формат следующий: ftp://user:password@host:port/url-path http://user:password@host:port/url-path В таком формате, часть ``user:password'' хранится как часть строки URL во всем процессе обработки Harvest'ом. Это может позволить любому, кто имеет доступ у вашему брокеру, получить доступ к документам, защищенным паролем. Вы можете хранить информацию с именем пользователя и паролем в ``спрятанном'' виде, указав индецифицирующую информацию в конфигурационном файле Gatherer'а. Для HTTP формат следующий: HTTP-Basic-Auth: realm username password где rreeaallmm - это то же самое, что и параметр AAuutthhNNaammee в конфигурационном файле Apache httpd _h_t_t_p_d_._c_o_n_f или файле _._h_t_a_c_c_e_s_s. В других конфигурациях сервера httpd значание realm иногда называется SSeerrvveerrIIdd. Для FTP формат в файле gatherer.cf следующий: FTP-Auth: hostname[:port] username password 44..77..44.. ККооннттрроолльь ддооссттууппаа кк ббааззее ддаанннныыхх GGaatthheerreerr''аа Вы можете использовать файл _g_a_t_h_e_r_d_._c_f (помещенный в каталог Gatherer'а DDaattaa--DDiirreeccttoorryy) для контроля доступа к базе данных Gatherer'а. В строке, начинающейся с AAllllooww, соодержится произвольное число имен доменов или хостов, которым разрешено подключаться к Gatherer'у. Если используется слово aallll, тогда подходят все хосты. DDeennyy имеет противоположное назначение к AAllllooww. Следующий пример разрешит доступ к базе данных Gatherer'а только хостам из доменов ccss..ccoolloorraaddoo..eedduu или uusscc..eedduu: Allow cs.colorado.edu usc.edu Deny all 44..77..55.. ППееррииооддииччеессккооее ссооббииррааннииее ии ооббннооввллеенниияя вв ррееааллььнноомм ввррееммееннии Программа Gatherer автоматически не совершает никаких периодических обновлений -- когда вы запустите ее, она обработает указанные URL'ы, запустит демон gatherd (если он уже не запущен), и затем прекратит работу. Если вы хотите периодически обновлять данные (например, чтобы получать новые файлы, как только они появлятся в FTP архиве), вам нужно использовать команду UNIX cron для запуска программы Gatherer с каким-то регулярным интервалом. Чтобы установить периодическое собирание при помощи cron, используйте команду RunGatherer, которую создаст RunHarvest. Пример скрипта RunGatherer: #!/bin/sh # # RunGatherer - Runs the ATT 800 Gatherer (from cron) # HARVEST_HOME=/usr/local/harvest; export HARVEST_HOME PATH=${HARVEST_HOME}/bin:${HARVEST_HOME}/lib/gatherer:${HARVEST_HOME}/lib:$PATH export PATH NNTPSERVER=localhost; export NNTPSERVER cd /usr/local/harvest/gatherers/att800 exec Gatherer "att800.cf" Вам следует запускать оманду RunGatherd из системного файла начальной загрузки (например, _/_e_t_c_/_r_c_._l_o_c_a_l), чтобы база данных Gatherer'а экспортировалась всякий раз, когда машина перегружается. Пример скрипта RunGatherd: #!/bin/sh # # RunGatherd - starts up the gatherd process (from /etc/rc.local) # HARVEST_HOME=/usr/local/harvest; export HARVEST_HOME PATH=${HARVEST_HOME}/lib/gatherer:${HARVEST_HOME}/bin:$PATH; export PATH exec gatherd -d /usr/local/harvest/gatherers/att800/data 8500 44..77..66.. ДДииссккооввыыйй ккээшш Gatherer содержит локальный дисковый кэш файлов, которые он собирает, чтобы снизить сетевой трафик после перезапуска неудачных попыток сбора. Однако, так как к уаленному серверу должен быть доступ независимо от того, запущен ли Gatherer, не устанвливайте работу cron на слишком частый запуск Gatherer'а. Типичное значение может быть неделя или месяц, в зависимости от того, как загружена сеть и как важно вам иметь более свежие данные. По умолчанию, локальный кэш Gatherer'а удаляется после каждого удачного завершения. Чтобы сохранить кэш между сессиями Gatherer'а, определите переменную KKeeeepp--CCaacchhee:: yyeess в конфигурационном файле Gatherer'а (раздел ``Задание значений переменных в конфигурационном файле Gatherer'а''). Если вы хотите, чтобы индекс вашего брокера отображал новые данные, тогода вы должны запустить Gatherer _и запустить коллекционирование брокера. По умолчанию брокер будет осуществлять коллекционирования раз в день. Если вы хотите, чтобы брокер коллекционировал данные, как только они будут собраны, тогда вам нужно координировать синхронизацию завершения собираний Gatherer'а и брокера. Если вы запускаете ваш Gatherer часто и используете KKeeeepp--CCaacchhee:: yyeess в конфигурационном файле Gatherer'а, тогда локальный кэш Gatherer'а может перемешиваться с получаемыми обновлениями. По умолчанию объекты в локальном кэше устаревают через 7 дней; однако, вы можте заставить ``устаревать'' их быстрее, установив переменную окружения $$GGAATTHHEERREERR__CCAACCHHEE__TTTTLL, равную числу секунд для времени жизни (Time-To- Live, TTL) перед запуском Gatherer'а, или вы можете изменить RunGatherer, чтобы удалять каталог Gatherer'а _t_m_p после каждого запуска Gatherer'а. Например, чтобы объекты устаревали в локальном кэше через один день: % setenv GATHERER_CACHE_TTL 86400 # one day % ./RunGatherer Размер локального кэша Gatherer'а равен по умолчанию 32 MB, но вы можете изменить это значение, установив переменную окружения $$HHAARRVVEESSTT__MMAAXX__LLOOCCAALL__CCAACCHHEE равную числу MB перед запуском Gatherer'а. Например, для максимального размера кэша 10 MB вы можете проделать следующее: % setenv HARVEST_MAX_LOCAL_CACHE 10 # 10 MB % ./RunGatherer Если у вас есть доступ к программному обеспечению, которое создает файлы, которые вы индексируете (например, если все обновления пропускаются через особенный редактор, скрипты обновления, или системные вызовы), вы можте модифицировать ПО, чтобы заставить Gatherer делать обновления в реальном времени сразу после создания или обновления файла. Например, если все пользователи обнавляют индексируемы файлы, используя определенную программу, эта программа может быть модифицирована для запуска Gatherer'а по окончании пользовательских обновлений. Заметьте, что при использовании вместе с cron, Gatherer предоставляет мощную возможность ``зеркалирования'' данных (data ``mirroring''). Вы можете использовать Gatherer для дублирования содержимого одного или нескольких сайтов, получения данных в различных форматах по различным протоколам (FTP, HTTP, etc.), по желанию проделывать разнообразие преобразований данных в зависимости от их типа или сайта, и эффективно выдавать результаты в виде сжатых резюме объектов SOIF другим сайтам, которые хотят использовать данные для построения индексов или других целей. 44..77..77.. ВВккллююччееннииее вв GGaatthheerreerr ииннффооррммааццииии,, ссггееннеерриирроовваанннноойй ввррууччннууюю Возможно вы захотите проверить качество автоматически сгенерированных шаблонов SOIF. В общем случае, техника Essence для автоматического извлечения информации производит неидельные результаты. Иногда возможно настроить summarizer'ы, чтобы они лучше подходили данному контексту (см. раздел ``Настройка шага суммирования''). Иногда, однако, может иметь смысл пополнить или изменить автоматически сгенерированные ключевые слова, вручную вводя информацию. Например, вы можете захотеть добавить атрибуты _T_i_t_l_e в содержимое резюме для набора документов PostScript (так как довольно трудно получить их автоматически из PostScript). Harvest имеет некоторые программы, которые автоматически вычищают базу данных Gatherer'а. Программа rmbinary удаляет любые двоичные данные из шаблонов объектов. Программа cleandb делает простое утверждение объектов SOIF, и если задан флаг --ttrruunnccaattee, она обрежет поле данных _K_e_y_w_o_r_d_s до 8 килобайт. Чтобы помочь вручную управлять базами данных Gatherer'а, имеется средство управления базами данных GDBM gdbmutil в _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r. В будущих выпусках Harvest'а мы добавим механизм на основе форм, чтобы легко вручную вносить дополнения. А пока вы можете дополнять базу данных Gatherer'а информацией, написанной вручную, используя программы mktemplate, template2db, mergedb и mkindex. Сначала вам нужно создать файл (назовем его, скажем, _a_n_n_o_t_a_t_i_o_n_s) в слеующем формате: @FILE { url1 Attribute-Name-1: DATA Attribute-Name-2: DATA ... Attribute-Name-n: DATA } @FILE { url2 Attribute-Name-1: DATA Attribute-Name-2: DATA ... Attribute-Name-n: DATA } ... Заметьте, что _а_т_р_и_б_у_т_ы должны начинаться в нулевой колонке и должна быть одна табуляция после колонки, а данные (_D_A_T_A) должны быть в пределах одной строчки. Затем, запустите программы mktemplate и template2db, чтобы сгенерировать SOIF и потом версии GDBM этих данных (у вас может быть несколько файлов с дополнениями, и вы можете сгенерировать одну базу данных GDBM при помощи вышеуказанных команд): % set path = ($HARVEST_HOME/lib/gatherer $path) % mktemplate annotations [annotations2 ...] | template2db annotations.gdbm Наконец, запустите mergedb, чтобы включить дополнения в автоматически сгенерированные данные, и mkindex, чтобы сгенерировать их индекс. Использование mergedb: mergedb production automatic manual [manual ...] Идея заключается в том, что _p_r_o_d_u_c_t_i_o_n - окончательная база данных GDBM database, которую будет обслуживать Gatherer. Это _н_о_в_а_я база данных, которая будет генерироваться из других баз в командной строке. _a_u_t_o_m_a_t_i_c - это база данных GDBM, которую Gatherer сгенерировал в предыдущем запуске (наример, _W_O_R_K_I_N_G_._g_d_b_m или предыдущая _P_R_O_D_U_C_T_I_O_N_._g_d_b_m). _m_a_n_u_a_l и т.д. - базы данных GDBM, которые вы создали вручную. Когда запускается mergedb, она строит базу данных _p_r_o_d_u_c_t_i_o_n, сперва скопировав шаблоны из баз даных _m_a_n_u_a_l, а затем соединив с атрибутами атрибуты из базы данных _a_u_t_o_m_a_t_i_c. В случае конфликта (одни и те же атрибуты имеют различные значения в базах _m_a_n_u_a_l и _a_u_t_o_m_a_t_i_c), значения _m_a_n_u_a_l перевесят значения _a_u_t_o_m_a_t_i_c. Если хранить автоматически и вручную сгенерированные данные отдельно, вы можете избежать потерю обновлений вручную при периодических автоматических собираниях. Чтобы это сделать, вам нужно создать скрипт, перевносить свои дополнения в автоматически собранные данные после каждого собирания. Пример использования mergedb: % mergedb PRODUCTION.new PRODUCTION.gdbm annotations.gdbm % mv PRODUCTION.new PRODUCTION.gdbm % mkindex Если база данных manual выглядит так: @FILE { url1 my-manual-attribute: this is a neat attribute } а база данных automatic выглядит так: @FILE { url1 keywords: boulder colorado file-size: 1034 md5: c3d79dc037efd538ce50464089af2fb6 } то в конце база данных production будет выглядеть вот так: @FILE { url1 my-manual-attribute: this is a neat attribute keywords: boulder colorado file-size: 1034 md5: c3d79dc037efd538ce50464089af2fb6 } 44..88.. УУссттррааннееннииее ннееппооллааддоокк ООттллааддккаа Доплнительная информация от отдельных программ и библиотечных функций может записана, если установить отладочные флаги (debugging flags). Отладочный флаг имеет вид --DDsseeccttiioonn,,lleevveell. _S_e_c_t_i_o_n -- это целое число в пределах 1-255, а _l_e_v_e_l -- целое число в пределах 1-9. Флаги могут быть заданы в командной строке, при помощи тэга DDeebbuugg--OOppttiioonnss:: в конфигурационном файле Gatherer'а, или установлением переменной окружения $$HHAARRVVEESSTT__DDEEBBUUGG. Примеры: Debug-Options: -D68,5 -D44,1 % httpenum -D20,1 -D21,1 -D42,1 http://harvest.cs.colorado.edu/ % setenv HARVEST_DEBUG '-D20,1 -D23,1 -D63,1' Разделы отладки (debugging sections) и уровни (levels) относятся к следующим разделам кода: of the code: section 20, level 1, 5, 9 liburl обработка URL section 21, level 1, 5, 9 Функции HTTP библиотеки liburl section 22, level 1, 5 Функции дискового кэша библиотеки liburl section 23, level 1 Функции FTP библиотеки liburl section 24, level 1 Функции Gopher библиотеки liburl section 25, level 1 urlget - отдельная программа liburl section 26, level 1 ftpget - отдельная программа liburl section 40, level 1, 5, 9 Нумерация URL Gatherer'ом section 41, level 1 Нумерация Gatherer'а, подтверждение URL section 42, level 1, 5, 9 Нумерация Gatherer'а для HTTP section 43, level 1, 5, 9 Нумерация Gatherer'а для Gopher section 44, level 1, 5 Нумерация Gatherer'а, функции фильтра section 45, level 1 Нумерация Gatherer'а для FTP section 46, level 1 Нумерация Gatherer'а для URL'ов типа file:// section 48, level 1, 5 Нумерация Gatherer'а, robots.txt section 60, level 1 Gatherer essence, обработка объекта данных section 61, level 1 Gatherer essence, функции базы данных section 62, level 1 Gatherer essence, главная часть (main) section 63, level 1 Gatherer essence, распознавания типов section 64, level 1 Gatherer essence, суммирование объектов section 65, level 1 Gatherer essence, извлечение объектов section 66, level 1, 2, 5 Gatherer essence, пост-суммирование section 67, level 1 Gatherer essence, код ID объекта section 69, level 1, 5, 9 Обработка шаблонов SOIF section 70, level 1, 5, 9 Broker, регистр section 71, level 1 Broker, функции коллекций section 72, level 1 Broker, функции разбора SOIF section 73, level 1, 5, 9 Broker, хэш-таблицы регистра section 74, level 1 Broker, функции управления хранением section 75, level 1, 5 Broker, функции обработки запросов section 75, level 4 Broker, отладка query_list section 76, level 1 Broker, функции обработки событий section 77, level 1 Broker, main section 78, level 9 Broker, цикл select(2) section 79, level 1, 5, 9 Broker, управление gatherer-id section 80, level 1 Общие утилиты, управление памятью section 81, level 1 Общие утилиты, функции буфера section 82, level 1 Общие утилиты, системные(3) функции section 83, level 1 Общие утилиты, функции путей (pathname) section 84, level 1 Общие утилиты, обработка имени хоста section 85, level 1 Общие утилиты, обработка строк section 86, level 1 Общие утилиты, кэш хостов DNS section 101, level 1 Broker, движок индекса PLWeb section 102, level 1, 2, 5 Broker, движок индекса Glimpse section 103, level 1 Broker, движок индекса Swish ССииммппттоомм Gatherer _н_е _с_о_б_и_р_а_е_т _в_с_е _о_б_ъ_е_к_т_ы, на которые указывают некоторые из моих RootNode'ов. РРеешшееннииее Gatherer делает различные ограничения на нумерацию, чтобы предостеречь плохо сконфигурированный Gatherer от неправильного обращения к серверам или от ``дикого'' запуска. Обратитесь в раздел ``Описание RootNode'' за деталями о том, как переделать эти ограничения. ССииммппттоомм _Н_е _с_р_а_б_о_т_а_л_о _л_о_к_а_л_ь_н_о_е _п_р_е_о_б_р_а_з_о_в_а_н_и_е _(_L_o_c_a_l_-_M_a_p_p_i_n_g_) - объекты получены по обычным протоколам удаленного доступа. РРеешшееннииее Локальное преобразование не удастся, если: ╥ Локальное преобразование не удастся, если: ╥ локальный файл - не регулярный файл; ╥ у локального файла установлены биты на исполнение. Так, к каталогам, символическим ссылкам и сценариям CGI всегда обращается сервер, а не локальная файловая система. Мы не предоставляем преобразование URL для локальных преобразований. Если ваш URL имеет специальные символы, от которых нужно избавиться, то локальное преобразование также не удастя. Добавьте опцию отладчика --DD2200,,11, чтобы понять, как происходит локальное преобразование. ССииммппттоомм Используя опцию ----ffuullll--tteexxtt, я вижу много _н_е_о_б_р_а_б_о_т_а_н_н_ы_х _д_а_н_н_ы_х в резюме содержимого, которые имеют мало ключевых слов для поиска. РРеешшееннииее На данный момент ----ffuullll--tteexxtt просто включает все данные из содержимого в резюме SOIF. Использование механизмов суммирования отдельных типов данных, описанных в разделе ``Настройка шага суммирования'', будет лучше работать в этом случае, но потребует от вас указать, как нужно извлекать данные для отдельных типов файлов. В будущих версиях Harvest'а мы заменим опцию Essence ----ffuullll--tteexxtt, чтобы выполнять извлечение содержимого перед включением полного текста документов. ССииммппттоомм Не сгенерировались индексирующие термины в резюме SOIF для тэгов META в моих документах HTML. РРеешшееннииее Вероятно, это показывает, что ваш HTML синтаксически неверно организован, и следовательно HTML summarizer на основе SGML не способен понять его. Обратитесь в раздел ``Суммирование данных SGML'' за деталями и опциями отладки. ССииммппттоомм Собранные данные _н_е _о_б_н_о_в_л_я_ю_т_с_я. РРеешшееннииее Gatherer автоматически не производит периодических обновлений. Обратитесь в раздел ``Периодическое собирание и обновления в реальном времени'' за деталями. ССииммппттоомм Gatherer записывает _н_е_м_н_о_г_о _д_р_у_г_и_е _U_R_L в резюме _S_O_I_F, а не те, что я указал в _к_о_н_ф_и_г_у_р_а_ц_и_о_н_н_о_м _ф_а_й_л_е Gatherer'а. РРеешшееннииее Это происходит потому, что Gatherer пытается привести URL к каноническому формату. Он делает это, убирая номера портов по умолчанию и похожие ``косметические'' изменения. Также по умолчанию Essence (подсистема Gtherer'а извлечения содержимого) удаляет стандартные типы из stoplist.cf, который включает запросы HTTP (состав cgi-bin). ССииммппттоомм Нет _L_a_s_t_-_M_o_d_i_f_i_c_a_t_i_o_n_-_T_i_m_e (время последнего изменения) или _а_т_р_и_б_у_т_о_в _M_D_5 в моих данных SOIF, поэтому брокер не может делать повторного отсеивания. РРеешшееннииее Если вы собираете удаленно созданную вручную информацию, она добывается Harvest'ом, используя ``exploder'ы'', которые транслируют удаленный формат в SOIF. Это значит, что они не имеют прямого способа заполнить информацию Last-Modification- Time или MD5 за одну запись. Заметьте также, что это занчит, что после одного обновления удаленные записи будут выглядеть обновленными, что приведет к большей сетевой загрузке для брокера, который собирает данные с этого Gatherer'а. Как решение, вы можете вычислять MD5 для всех объектов и хранить их как часть записи. Потом, когда вы запустите exploder, вы сгенерируете только временные метки для тех объектов, у которых изменилось MD5 - это даст вам реальные времена последних изменений. ССииммппттоомм Gatherer заменяет на ``%7e'' тильды `` '' во всех URL'ах каталогов пользователя. directory URLs. РРеешшееннииее Gatherer следует RFC1738, который говорит, что тильда внутри URL должна кодироваться как ``%7e'', так как она рассматривается как ``небезопасный'' символ. ССииммппттоомм Когда я ищу, используя ключевые слова, которые точно есть в документе, который я проиндексировал Harvest'ом, _д_о_к_у_м_е_н_т _н_е _н_а_х_о_д_и_т_с_я. РРеешшееннииее Harvest использует подсистему извлечения содержимого _E_s_s_e_n_c_e, которая по умолчанию не извлекает каждое ключевое слово в документе. Вместо этого, она использует эвристику, чтобы попытаться выбрать наиболее нужные ключевые слова. Вы можете установить, какие ключевые слова выбирать настроив summarizer'ы для этих типов данных, что обсуждается в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''. Или вы можете сказать _E_s_s_e_n_c_e, чтобы он использовал полнотекстовое суммирование, если чувствуете, что увелечение занимаего места на диске будет оправдано, это обсуждается в разделе ``Задание значений переменных в конфигурационном файле Gatherer'а''. ССииммппттоомм Я запускаю Harvest на HP-UX, но процесс essence Gatherer'а _з_а_н_и_м_а_е_т _с_л_и_ш_к_о_м _м_н_о_г_о _п_а_м_я_т_и. РРеешшееннииее Имеющаяся библиотека регулярных выражений имеет утечки памяти на HP-UX, поэтому вам нужно использовать библиотеку регулярных выражений, поставляемую с HP-UX. Замените _M_a_k_e_f_i_l_e в _s_r_c_/_g_a_t_h_e_r_e_r_/_e_s_s_e_n_c_e: REGEX_DEFINE = -DUSE_POSIX_REGEX REGEX_INCLUDE = REGEX_OBJ = REGEX_TYPE = posix ССииммппттоомм Я создал конфигурационный файл, чтобы _у_к_а_з_а_т_ь, как Essence должен извлекать данные types/content, но он _и_с_п_о_л_ь_з_у_е_т _в_с_е _р_а_в_н_о _с_т_а_н_д_а_р_т_н_ы_е _м_е_х_а_н_и_з_м_ы _t_y_p_i_n_g_/_e_x_t_r_a_c_t_i_n_g. РРеешшееннииее Убедитесь, что у вас LLiibb--DDiirreeccttoorryy установлена в каталог _l_i_b_/, в который вы положили ваш конфигурационный файл. LLiibb--DDiirreeccttoorryy определяется в конфигурационном файле вашего Gatherer'а. ССииммппттоомм У меня проблемы с _р_а_з_р_е_ш_е_н_и_е_м _и_м_е_н _х_о_с_т_о_в на SunOS. РРеешшееннииее Для того, чтобы собирать данные с хостов вне вашей организации, ваша система должна быть способна разрешать полностью правильные имена доменов в адреса IP. Если ваша система не может разрешить имена хостов, вы увидите сообщения об ошибках, как ``Unknown Host''. В этом случае, одно из двух: ╥ имя хоста, которое вы задали, на самом деле не существует; ╥ ваша система не сконфигурирована для использования DNS. Чтобы убедиться, что ваша система сконфигурирована для DNS, убедитесь, что файл _/_e_t_c_/_r_e_s_o_l_v_._c_o_n_f существует и может быть прочитан. Прочитайте страницу man для resolv.conf(5) с информацией об этом файле. Вы можете убедиться, что DNS работает при помощи команды nslookup. Некоторые сайты могут использовать Службу сетевой информации Sun Microsystem (Network Information Service, NIS) вместо или вместе с DNS. Мы считаем, что Harvest работает на системах, в которых NIS был правильно сконфигурирован. Сервера NIS (имена которых вы можете определить при помощи команды ypwhich) должны быть сконфигурированы, чтобы делать запросы к серверам DNS для имен хостов, о которых они ничего не знают. Попробуте опцию --bb команды ypxfr. ССииммппттоомм Я не могу заставить Gatherer работать через наш _f_i_r_e_w_a_l_l _g_a_t_e_w_a_y. РРеешшееннииее Harvest поддерживает только получение объектов HTTP через прокси. Пока еще невозможно запросить Gopher и FTP объекты через firewall. Для этих объектов, вам может понадобиться запустить Harvest внутренне (за firewall'ом) или на самом хосте с firewall'ом. Если вы видите сообщение ``Host is unreachable'', вероятно, возникли эти проблемы: ╥ ваше соединение с Internet временно невозможно из-за сбоя в цепи или маршрутизации; ╥ вы за firewall'ом. Если вы видите сообщение ``Connection refused'', вероятно, проблема в том, что вы пытаетесь подсоединиться к неиспользуемому порту на машине назначения. Другими словами, нет программы, прослушивающей соединения на этом порту. Gatherer Harvest'а - это, по существу, клиент WWW. Вы должны ожидать, что он будет работать так же как и любой Web броузер. 55.. BBrrookkeerr 55..11.. ООббззоорр Broker получает индексную информацию от Gatherer'ов и других брокеров и управляет ею, а также предлагает вебинтерфейс для запросов к индексируемой информации. 55..22.. ННааччааллььннааяя ууссттааннооввккаа Брокер автоматически запускается командой RunHarvest. Другие подобные команды описываются в разделе ``Запуск системы: команда RunHarvest и связанные с ней команды''. В этом разделе мы обсуждаем различные способы переделки и настройки брокера, как администрировать брокер и различные программные интерфейсы брокера. Как показано на рисунке ``1'', брокер использует гибкий интерфейс индексирования, который поддерживает множество подсистем индексирования. По умолчанию брокер Harvest'а использует Glimpse в качестве индексатора, но также с брокером работают другие индексаторы, как Swish и WAIS (как свободный freeWAIS <ftp://ftp.cnidr.org/pub/software/freewais/>, так и коммерческий WAIS) (см. раздел ``Использование различных индексирующих/поисковых систем вместе с Broker'ом''). Для создания нового брокера запустите программу CreateBroker. Она задаст вам ряд вопросов о том, как бы вы хотели сконфигурировать ваш брокер, а потом атоматически создаст и сконфигурирует его. Для запуска вашего брокера используйте программу RunBroker, которую создаст CreateBroker. Брокер должен запускаться при перезапуске вашей системы. Чтобы предотвратить брокер от коллекционирования при запуске, используйте опцию --nnooccooll. Есть много способов, которыми вы можете переделать и настроить брокер, обсуждаемые в разделах ``Настройка индексирования Glimpse в Broker'е '' и ``Использование различных индексирующих/поисковых систем вместе с Broker'ом''. Вы также можете использовать команду RunHarvest, рассматриваемую в разделе ``Запуск системы: команда RunHarvest и связанные с ней команды'', чтобы создать как брокер, так и Gatherer. 55..33.. ООттппррааввллееннииее ззааппррооссоовв BBrrookkeerr''уу Брокер Harvest'а может работать с различными типами запросов. Запросы, обрабатываемые отдельным брокером, зависят от того, какая индексируюшая/поисковая система используется внутри его (например, WAIS не поддерживает некоторые из запросов, которые поддерживает Glimpse). В этом разделе мы описываем весь синтаксис. Если данный брокер не поддерживает определенный тип запросов, он вернет ошибку, когда пользователь совершит запрос такого типа. Простейшие запросы - это отдельные ключевые слова, например: lightbulb Поиск по общеупотребительным словам (как ``computer'' или ``html'') может занять много времени. В частности для больших брокеров часто полезно использовать более мощные запросы. Harvest поддерживает много раздичных индексирующих/поисковых движков с разными возможностями. На данный момент, наш самый мощный (и чаще используемый) поисковый движок -- Glimpse, который поддерживает: ╥ запросы с учетом и без учета регистра; ╥ поиск по частям слова, целым словам, или фразам из нескольких слов (как ``обнаружение ресурсов''); ╥ булевские (И/ИЛИ) комбинации ключевых слов; ╥ приблизительные сопоставления (например, позволяя допускать ошибки в написании); ╥ структурированные запросы (которые дают вам возможность совершать поиск по определенным атрибутам); ╥ вывод совпавших строк или целыз записей (например, для цитирования); ╥ указание пределов на число возвращаемых совпадений; ╥ ограниченную форму регулярных выражений (например, позволяя задавать выражения, которые подходят ко всем словам, оканчивающимся на данный суффикс). Ниже описываются различные типы запросов (и как их использовать). Заметьте, что вы используете тот же синтаксис, независимо от, того какой движок запущен в данном брокере, но не все движки поддерживают все вышеперечисленные свойства. В частности, некоторые брокеры используют WAIS, который иногда ищет быстрее, чем Glimpse, но поддерживает только булевские комбинации в запросах и возможность указать ограничения на количество выдаваемых результатов. Различные опции: учет регистра, приблизительное сопоставление, возможность показывать совпавшие строки и записи и возможность указать пределы числа совпадений -- все они могут быть указаны пи помощи кнопок и меню в формах запросов брокера. Структурированный запрос имеет вид: tag-name : value Где _t_a_g_-_n_a_m_e -- это имя атрибута резюме содержимого, а _v_a_l_u_e - значание для поиска по этому атрибуту. Если вы кликните на резюме содержимого (Content Summary), вы увидите, какие атрибуты доступны для данного брокера. Список наиболее общих атрибутов показан в разделе ``Список общих имен атрибутов SOIF ''. Поиск по ключевым словам и структурированные запросы могут быть объединены, используя булевские операторы (AND и OR) для образования сложных запросов. Без скобок логические операции применяются слева направо. Для фраз с несколькими словами или регулярными выражениями вы должны заключать строки в двойные кавычки, например, "internet resource discovery" или "discov.*" Двойные кавычки также должны быть использованы при поиске по символам, не являющимся буквами алфавита или цифрами. 55..33..11.. ППррииммееррыы ззааппррооссоовв ЗЗааппрроосс ддлляя ппррооссттооггоо ппооииссккаа ппоо ккллююччееввооммуу ссллооввуу:: _A_r_i_z_o_n_a тот запрос вернет все объекты брокера, содержащие слово _A_r_i_z_o_n_a. ББууллееввссккиийй ззааппрроосс:: _A_r_i_z_o_n_a _A_N_D _d_e_s_e_r_t Этот запрос веренеи все объекты содержащие оба слова где угодно в объекте в любом порядке. ЗЗааппрроосс сс ффррааззоойй:: _"_A_r_i_z_o_n_a _d_e_s_e_r_t_" Этот запрос вернет все объекты брокера, которые содержат _A_r_i_z_o_n_a _d_e_s_e_r_t как фразу. Заметьте, что вокруг фразы нужно ставить двойные кавычки. ББууллееввссккииее ззааппррооссыы сс ффррааззааммии:: _"_A_r_i_z_o_n_a _d_e_s_e_r_t_" _A_N_D _w_i_n_d_s_u_r_f_i_n_g Этот запрос вернет все объекты брокера, которые содержат _A_r_i_z_o_n_a _d_e_s_e_r_t как фразу и слово _w_i_n_d_s_u_r_f_i_n_g. ППррооссттоойй ссттррууккттуурриирроовваанннныыйй ззааппрроосс:: _T_i_t_l_e _: _w_i_n_d_s_u_r_f_i_n_g Этот запрос вернет все объекты брокера, в которых атрибут _T_i_t_l_e содержит значение _w_i_n_d_s_u_r_f_i_n_g. ССллоожжнныыйй ззааппрроосс:: _"_A_r_i_z_o_n_a _d_e_s_e_r_t_" _A_N_D _(_T_i_t_l_e _: _w_i_n_d_s_u_r_f_i_n_g_) Этот запрос вернет все объекты брокера, которые содержат фразу _A_r_i_z_o_n_a _d_e_s_e_r_t и в которых атрибут _T_i_t_l_e содержит значение _w_i_n_d_s_u_r_f_i_n_g. 55..33..22.. РРееггуулляяррнныыее ввыырраажжеенниияя Glimpse поддерживает некоторые типы регулярных выражений. Поиск по регулярным выражениям может быть намного медленне других типов поиска. Далее следует частичный список возмошных шаблонов. (За деталями обратитесь к документации Glimpse.) ╥ _^_j_o_e соответствует ``joe'' в начале строки. ╥ _j_o_e_$ соответствует ``joe'' в конце строки. ╥ _[_a_-_h_o_-_z_] соответствует любому символу между ``a'' и ``h'' или между ``o'' и ``z''. ╥ _. соответствует одному произвольному символу кроме символа новой строки. ╥ _c_* соответствует произвольному числу символов ``c'' или ни ондного такого символа. ╥ _._* соотвествует произвольному числу любых символов кроме новой строки. ╥ _\_* соответствует символу ``*''. (_\ позволяет передать любой из вышеуказанных спецсимволов.) Регулярные выражения на данный момент ограничены по длине до приблизительно 30 символов, не включая метасимволы. Регулярные выражения обычно не будут переступать за границы слов (так как в индексе хранятся только слова). Так, например, _`_`_l_i_n_._*_i_n_g_'_' найдет ``linking'' или ``flinching'', но не ``linear programming''. 55..33..33.. ООппццииии ззааппррооссоовв,, ввыыббииррааееммыыее вв ммееннюю ииллии ккннооппккааммии Страница запросов может иметь следующие меню (типа checkbox), чтобы позволить контролировать спецификацию запроса. ББеезз ууччееттаа ррееггииссттрраа:: При выборе этого меню запрос станет нечувствительным к регистру (заглавные и строчные буквы не различаются). В противном случае запрос будет чувствительным к регистру. По умолчанию - без учета регистра. ССооппооссттааввллееннииее ккллююччееввыыхх ссллоовв ппоо ггррааннииццаамм ссллоовв:: При выборе этого меню ключевые слова будут сопоставляться по границам слов. В противном случае ключевое слово будет сопоставляться части слова (или фразы). Например, ``network'' сопоставится с ``networking'', ``sensitive'' сопоставится с ``insensitive'', и ``Arizona desert'' сопоставится с ``Arizona desertness''. По умолчанию -- сопоставление по границам слов. ЧЧииссллоо ддооппууссттииммыыхх оошшииббоокк:: Glimpse позволяет запросу содержать некоторое число ошибок. Ошибка -- это или удаление, вставка или замещение одного символа. Опция лучшее сопоставление (Best Match) найдет сопоставление (-ия) с наименьшим числом ошибок. По умолчанию -- 0 (ноль) ошибок. _П_р_и_м_е_ч_а_н_и_е_: Предыдущие три опции не применяются к именам атрибутов. Имена атрибутов всегда чувствительны к регистру и не допускают ошибок. 55..33..44.. ФФииллььттррооввааннииее ррееззууллььттааттоовв ззааппррооссаа Harvest позволяет фильтровать результаты запроса по любому из частей запроса, используя атрибуты, определенные в разделе ``Список общих имен атрибутов SOIF''. Это делается определением параметров ffiilltteerr в форме запросов. Можно определить больше, чем один параметр фильтра; они будут конкатенированы булевым ИИ. Параметры фильтра состоят из двух частей, разделенных вертикальной чертой ``|''. Первая часть - это выражение запроса, которое прикрепляется к запросу пользователя, используя AANNDD перед отправлением запроса брокеру. Опциональная вторая часть -- это текст HTML, который будет показываться на странице результатов для того, чтобы дать пользователю некоторую информацию по примененному фильтру. Пример: <SELECT NAME="filter"> <OPTION VALUE=''>Нет фильтра <OPTION VALUE='uri: "xyz\.edu"|Seach only xyz.edu'>Искать только xyz.edu <OPTION VALUE='type: html|HTML documents only'>Искать только документы HTML </SELECT> Первая опция везвращает неотфильтрованный результат. Вторая опция возвращает только страницы с ``xyz.edu'' в их URL'ах. Третья опция возвращает только документы HTML. Обратитесь на страницу расширенного поиска брокера за другими примерами. 55..33..55.. ППррееддссттааввллееннииее ррееззууллььттааттоовв Страница может иметь следующие чекбоксы, которые позволяют контролироватьf представление результатов запроса. ППооккааззааттьь ссооввппааввшшииее ссттррооккии ((иизз ррееззююммее ссооддеерржжииммооггоо)):: При выборе этого меню, результат будет содержать строки из резюме содержимого, которые удовлетворили запросу. В противном случае, совпавшие строки не будут показаны. По умолчанию -- показывать совпавшие строки. ППооккааззыыввааттьь ооппииссаанниияя ооббъъееккттоовв ((еессллии ддооссттууппнноо)):: Некоторые бъекты имеют короткие, в одну строчку, описания. При выборе этого меню будут показываться описания. В противном случае описания объектов не будут показываться. По умолчанию -- показывать описания. ППооккааззыыввааттьь ссссыыллккии кк ппррооииннддееккссииррооввааннннооммуу ррееззююммее ссооддеерржжииммооггоо:: Это меню позволяет вам выбрать, показывать ли ссылки на проиндексированные резюме объектов. По умолчанию -- не показывать. 55..44.. ННаассттррооййккаа ввыыддааввааееммооггоо ррееззууллььттааттаа ннаа ззааппрроосс BBrrookkeerr''уу Администратору Harvest'а можно настроить, как будет генерироваться результат запроса брокеру. Это можно сделать, модифицируя конфигурационный файл, который читается программой Perl search.cgi во время выполнения запроса. search.cgi позволяет настроить почти любой аспект его HTML-выхода. Файл _$_H_A_R_V_E_S_T___H_O_M_E_/_c_g_i_-_b_i_n_/_l_i_b_/_s_e_a_r_c_h_._c_f содержит определения выхода по умолчанию. Отдельные брокеры могуть быть настроены путем создания похожего файла, который заменит определения по умолчанию. 55..44..11.. ККооннффииггууррааццииоонннныыйй ффааййлл sseeaarrcchh..ccff Определения заключаются в начальные и конечные тэги типа SGML. Например: <HarvestUrl> http://harvest.sourceforge.net/ </HarvestUrl> Последний символ новой строки удаляется из каждого определения, так что вышеуказанная строка станет ``http://harvest.sourceforge.net/''. Подстановка переменной происходит для каждого определения перед выводом. Некоторые особые переменные определены в search.cgi, которые могут использоваться внутри определения. Например: <BrokerLoad> Sorry, the Broker at <STRONG>$host, port $port</STRONG> is currently too heavily loaded to process your request. Please try again later.<P> </BrokerLoad> Когда определения будут печататься, переменные _$_h_o_s_t и _$_p_o_r_t будут заменены на имя хоста и порт брокера. 55..44..11..11.. ООппррееддееллеенннныыее ппееррееммеенннныыее Следующие переменные определяются как только начинает обрабатываться строка запроса. Они могут быть использованы перед тем, как брокер вернет какой-либо результат. $maxresult максимальное возвращаемое число совпавших строк $host имя хоста брокера $port порт брокера $query строка запроса, введенная пользователем $bquery полная строка запроса, посланная брокеру Эти переменные определены для каждого объекта, удовлетворяющего запросу (подходящего), выдаваемого брокером. $objectnum число возращаемых объектов $desc атрибут описания подходящих объектов $opaque ВСЕ совпавшие строки из подходящих объектов $url Первоначальный URL of the matched object $A метод доступа к $url (например, http) $H имя хоста (включая порт) из $url $P часть $url, содержащая путь $D часть $P с именем каталога $F часть $P с именем файла $cs_url URL резюме содержимого в базе данных брокера $cs_a часть $cs_url с методом доступа $cs_h часть $cs_url с именем хоста $cs_p часть $cs_url, содержащая путь $cs_d часть $cs_p с именем каталога $cs_f часть $cs_p с именем файла 55..44..11..22.. ССппииссоокк ооппррееддееллеенниийй Ниже приведен частичный список определений. Полный список можн найти в файле search.cf. Здесь описаны только определения, которые, возможно, вам захочется изменить. <<TTiimmeeoouutt>> Значение времени ожидания для search.cgi. Если брокер не отвечает в течение этого времени, search.cgi выходит. <<RReessuullttHHeeaaddeerr>> Первая часть страницы результатов. Должно вероятно содержать элемент HTML <<TTIITTLLEE>> и строку запроса пользователя. <<RReessuullttTTrraaiilleerr>> Последняя часть страницы результатов. По умолчанию имеет ссылки URL к домашней странице брокера и домашней странице проекта Harvest. <<RReessuullttSSeettBBeeggiinn>> Это вывод прямо перед циклом по всем подходящим объектам. <<RReessuullttSSeettEEnndd>> Это вывод сразу после завершения цикла по объектам. <<PPrriinnttOObbjjeecctt>> Это определение печатает подошедший объект. Оно, возможно, должно включать переменные _$_u_r_l_, _$_c_s___u_r_l_, _$_d_e_s_c и _$_o_p_a_q_u_e. <<EEnnddBBrrookkeerrRReessuullttss>> Печатается между <<RReessuullttSSeettEEnndd>> и <<RReessuullttTTrraaiilleerr>>, если запрос был успешным. Вероятно, должно включать число найденных объектов и/или совпавших строк. <<FFaaiillBBrrookkeerrRReessuullttss>> Похоже на <<EEnnddBBrrookkeerrRReessuullttss>>, но печатается, если вернул ошибку в ответ на запрос. <<OObbjjeeccttNNuummPPrriinnttff>> Формат printf строки для объекта под номером (_$_o_b_j_e_c_t_n_u_m). <<TTrruunnccaatteeWWaarrnniinngg>> Печатает предупреждающее сообщение, если результат был усечен до максимального числа совпавших строк. Следующие определения немного отличаются, так как они определяются как инструкции Perl, а не строки. <<MMaattcchheeddLLiinneeSSuubb>> Определяется для каждой совпавшей строки, возвращаемой брокером. Может быть использовано для разделения совпавших строк или, чтобы удалить главную ``совпавшую строку'' и строки с именами атрибутов. <<IInniittFFuunnccttiioonn>> Определяется вначале программы search.cgi. Может быть использовано для установки специальных переменных или чтения файлов данных. <<PPeerrOObbjjeeccttFFuunnccttiioonn>> Определяется для каждого объекта прямо перед вызовом <<PPrriinnttOObbjjeecctt>>. <<FFoorrmmaattAAttttrriibbuuttee>> Определяется для каждого атрибута SOIF, запрошенного для подходящего объекта (см. раздел ``Выдача атрибутов SOIF в результатах'' _$_a_t_t установлено для имени атрибута, а _$_v_a_l установлено для значения атрибута. 55..44..22.. ППррииммеерр ффааййллаа ннаассттррооеекк sseeaarrcchh..ccff Следующие определения демонстрируют, как менять вывод search.cgi. <<PPeerrOObbjjeeccttFFuunnccttiioonn>>, что определение не пусто. Оно также присоединяется спереди к строке ``matched data:'' перед любой совпавшей строкой. Определение <<PPrriinnttOObbjjeecctt>> печатает номер объекта, описание и индексные данные, все в первой строчке. Описание располагается вокруг тэгов привязки HMTL (anchor tags), так что оно становится ссылкой на первоначально созданный объект. Слова ``indexing data'' - ссылка на программу displaySOIF, которая отфрматирует резюме содержимого для броузеров HTML. Номер объекта отформатирован как число в скобках, такое что все вместе занимает до четырех символов. Определение <<MMaattcchheeddLLiinneeSSuubb>> включает четыре замещающих выражения. Первое удаляет слова ``Matched line'': в начале каждой совпавшей строчки. Второе удаляет атрибуты SOIF вида ``_p_a_r_t_i_a_l_-_t_e_x_t_{_4_3_}_:'' вначале каждой строки. Третье показывает имена атрибутов (например, _p_a_r_t_i_a_l_-_t_e_x_t_#) курсивом. Последнее выражение разделяет каждую строку пятью пробелами и располагает ее вместе со строкой описания. Опрделение <<EEnnddBBrrookkeerrRReessuullttss>> слегка модифицирует отчет о том, сколько объектов было найдено. # Пример показывает некоторые особенности настройки вывода Harvest'а # Больше информации можно найти на: # http://harvest.sourceforge.net/harvest/doc/html/manual.html # PerObjectFunction - это код Perl определенный для каждого совпадения <PerObjectFunction> # Создаем описание # Являются ли описания, предоставленные Harvest'ом очень короткими (например, пропущен <TITLE>)? if (length($desc) < 5) { # Да: использовать вместо него имя файла ($F) $description = "<I>File:</I> $F"; } else { # Нет: использовать описание Harvest'а $description = $desc; } # Форматируем совпавшие строки ("мутные данные") если данные есть if ($opaque ne '') { $opaque = "<strong>matched lines:</strong><BR>$opaque" } </PerObjectFunction> # PrintObject определяет появление совпадений <PrintObject> $objectnum <A HREF="$url"><STRONG>$description</STRONG></A> \ [<A HREF="$cs_a://$cs_h/Harvest/cgi-bin/displaySOIF.cgi?object=$cs_p">\ indexing data</A>] <pre> $opaque </pre>\n </PrintObject> # Форматируем появление числа совпадений <ObjectNumPrintf> (%2d) </ObjectNumPrintf> # Форматируем появление каждой совпавшей строки <MatchedLineSub> s/^Matched line: *//; # Remove "Matched line:" s/^([\w-]+# )[\w-]+{\d+}:\t/\1/; # Remove SOIF attributes of the form "partial-text{43}:" s/^([\w-]+#)/<I>\1<\/I>/; # Format attribute names as italics s/^.*/ $&/; # Add spaces to indent text </MatchedLineSub> # Модифицируем отчет о том, сколько объектов было найдено <EndBrokerResults> <STRONG>Found $nopaquelines matched lines, $nobjects objects.</STRONG> <P>\n </EndBrokerResults> 55..44..33.. ИИннттееггррииррооввааннииее вваашшиихх ннаассттррооеенннныыхх ккооннффииггууррааццииоонннныыхх ффааййллоовв Конфигурационные файлы search.cgi хранятся в _$_H_A_R_V_E_S_T___H_O_M_E_/_c_g_i_- _b_i_n_/_l_i_b. Имя настроенного файла занесено в список формы _q_u_e_r_y_._h_t_m_l и передано как опция программе search.cgi. Самый простой способ определить настроенный файл -поместить тэг <<IINNPPUUTT>> в форму HTML: <INPUT TYPE="hidden" NAME="brokerqueryconfig" VALUE="custom.cf"> Другой способ - позволить пользователям выбирать различные настройки при помощи списка <<SSEELLEECCTT>>: <SELECT NAME="brokerqueryconfig"> <OPTION VALUE=""> Default <OPTION VALUE="custom1.cf"> Customized <OPTION VALUE="custom2.cf" SELECTED> Highly Customized </SELECT> 55..44..44.. ВВыыддааччаа ааттррииббууттоовв SSOOIIFF вв ррееззууллььттааттаахх Можно запросить атрибуты SOIF из формы запросов HTML. Простое приближение - включить список select в форму запросов: <SELECT MULTIPLE NAME="attribute"> <OPTION VALUE="title"> <OPTION VALUE="author"> <OPTION VALUE="date"> <OPTION VALUE="subject"> </SELECT> Таким образом пользователь может контролировать, какие атрибуты показывать. Расположение этих атрибутов при выводе результатов в HTML контролируется инструкцией <<FFoorrmmaattAAttttrriibbuuttee>> в файле _s_e_a_r_c_h_._c_f, оисанном в разделе ``Конфигурационный файл search.cf''. 55..55.. ООппииссааннииее ииннттееррффееййссаа WWoorrlldd WWiiddee WWeebb Чтобы позволить броузерам легко взаимодействовать с брокером, мы реализовали WWW интерфейсы: административный и менеджер запросов брокеру. Эти WWW интерфейсы, которые включают несколько файлов HTML и несколько программ, использующих Common Gateway Interface (CGI), состоят из: ╥ файлов HTML, использующих формы для предоставления пользователю графического пользовательского интерфейса -- graphical user interface (GUI); ╥ CGI программы, которые действуют как шлюз между пользователем и брокером; ╥ файлы помощи для пользователя. Пользователи проходят через следующие шаги при использовании брокера для обнаружения информации: 1. Пользователь отправляет запрос брокеру. 2. Брокер обрабатывает запрос и возвращает результаты запроса пользователю. 3. Затем пользователь может посмотреть резюме содержимого из набора результатов, или прямо пойти по указанному URL в наборе результатов. Чтобы предоставить WWW-интерфейс, брокер должен быт запущен вместе с сервером HTTPr. Раздел ``Дополнительная установка для Harvest Broker'' описывает, как как конфигурировать ваш HTTP сервер для работы с Harvest. Вы можете запустить брокер не на той машине, на которой запущен сервер HTTP, но если вы хотите, чтобы пользователи могли видеть резюме содержимого брокера, тогда файлы брокера должны быть доступны вашему серверу HTTP. Вы можете подмонтировать по NFS те файлы или вручную скопировать их. Вам также понадобится изменить файл _B_r_o_k_e_r_s_._c_f и указать на хост, где запущен брокер. 55..55..11.. ФФааййллыы HHTTMMLL ддлляя ггррааффииччеессккооггоо ппооллььззооввааттееллььссккооггоо ииннттееррффееййссаа CreateBroker создает несколько файлов HTML и предоставляет GUI пользователю: _q_u_e_r_y_._h_t_m_l Содержит GUI для интерфейса запросов. CreateBroker установит разные файлы _q_u_e_r_y_._h_t_m_l для Glimpse, Swish и WAIS, так как каждая подсистема требует различных установок по умолчанию и поддерживает разную функциональность (например, WAIS не поддерживает приблизительный поиск, в отличие от Glimpse). Это также ``домашняя страница'' для брокера и ссылка на нее включена внизу во всех страницах результатов запросов. _a_d_m_i_n_._h_t_m_l Содержит GUI для административного интерфейса. Это файл устанавливается в каталог _a_d_m_i_n брокера. _B_r_o_k_e_r_s_._c_f Содержит информацию об именах хостов и портах поддерживаемых брокеров. Этот файл устанавливается в каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_b_r_o_k_e_r_s. Файл _q_u_e_r_y_._h_t_m_l использует значение тэга FORM ``broker'', чтобы передать имя брокера search.cgi, который в свою очередь получает имя хоста и порт из _B_r_o_k_e_r_s_._c_f. 55..55..22.. ППррооггррааммммыы CCGGII Когда вы устанавливаете WWW интерфейс (см. раздел ``The Broker''), несколько программ устанавливаются в каталог _/_H_a_r_v_e_s_t_/_c_g_i_-_b_i_n вашего сервера HTTP: search.cgi Эта программа берет отправленный запрос из _q_u_e_r_y_._h_t_m_l и посылает его указанному брокеру. Затем она получает результаты запроса от брокера, форматирует его в HTML и отправляет пользователю. displaySOIF.cgi Эта программа показывает резюме содержимого объектов брокера. BrokerAdmin.pl.cgi Эта программа принимает административную команду из _a_d_m_i_n_._h_t_m_l и отправляет ее соответствующему брокеру. Она получает результат от брокера и выдает его пользователю. 55..55..33.. ФФааййллыы ппооммоощщии ппооллььззооввааттееллюю WWW интерфейс брокера включает несколько файлов помощи, написанных на HTML. Эти файлы устанавливаются на ваш сервер HTTP в каталог _/_H_a_r_v_e_s_t_/_b_r_o_k_e_r_s, когда вы устанавливаете брокер (см. раздел ``Broker''): _q_u_e_r_y_h_e_l_p_._h_t_m_l Предоставляет учебное пособие по построению запросов брокеру и использованию форм _q_u_e_r_y_._h_t_m_l. _q_u_e_r_y_._h_t_m_l имеет ссылку на эту страницу. _a_d_m_i_n_h_e_l_p_._h_t_m_l Предоставляет учебное пособие по отправдению брокеру административных команд, используя форму _a_d_m_i_n_._h_t_m_l. _a_d_m_i_n_._h_t_m_l имеет ссылку на эту страницу. _s_o_i_f_h_e_l_p_._h_t_m_l Предоставляет краткое описание SOIF. 55..66.. ААддммииннииссттррииррооввааннииее BBrrookkeerr''аа У администраторов есть два основных способа управления брокером: через конфигурационные файлы _b_r_o_k_e_r_._c_o_n_f и _C_o_l_l_e_c_t_i_o_n_._c_o_n_f, и через интерактивный административный интерфейс. Интерактивный интерфейс контролирует разные средства и действующие параметры в брокере. Мы предоставляем HTML интерфейс для этих административных команд. Обратитесь в раздел ``Описание интерфейса коллектора: Collection.conf'' за дополнительной информацией о интерфейсе коллектора и административном интерфейсе брокера. Файл _b_r_o_k_e_r_._c_o_n_f - это список имен переменных и их значений, который состоит из информации о брокере (такой как каталог, где он находится) и порт, на котором он запущен. Файл _C_o_l_l_e_c_t_i_o_n_._c_o_n_f (обратитесь в раздел ``Описание интерфейса коллектора: Collection.conf'' за примером) - это список точек коллекционирования, откуда брокер будет собирать свою индексную информацию. Программа CreateBroker автоматически генерирует оба эти конфигурационные файла. Вы можете вручную отредактировать их в случае необходимости. Программа CreateBroker также создает файл _a_d_m_i_n_._h_t_m_l, который является административным интерфейсом для команд брокеру. Заметьте, что все административные команды требуют пароль, определенный в _b_r_o_k_e_r_._c_o_n_f. _З_а_м_е_ч_а_н_и_е_: Изменения конфигурации брокера не сохраняются при перезапуске брокера. Постоянные изменения конфигурации брокера должны быть сделаны вручную редактированием файла _b_r_o_k_e_r_._c_o_n_f. Административный интерфейс, созданный CreateBroker, имеет следующие поля: Command Выбрать административную команду. Ниже приведено описание команд. Parameters Указать параметры для тех команд, для которых это необходимо. Password Административный пароль. Broker Host Хост, на котором запущен брокер. Broker Port Порт, который прослушивает брокер. Административный интерфейс, созданный CreateBroker, поддерживает следующие команды: AAdddd oobbjjeeccttss bbyy ffiillee:: Добавить объект(ы) брокеру. Параметр -- список файлов, содержащих объекты SOIF, которые нужно добавить. CClloossee lloogg:: Записать всю накопленную лог-информацию и закрыть текущий лог-файл. Заставляет брокер прекратить вести логи. Параметров нет. CCoommpprreessss RReeggiissttrryy:: Предоставляет сбор мусора в файле реестра. Параметров нет. DDeelleettee eexxppiirreedd oobbjjeeccttss:: Удалить все объекты из брокера, у которых истекло время жизни _T_i_m_e_-_t_o_-_L_i_v_e. Параметров нет. DDeelleettee oobbjjeeccttss bbyy qquueerryy:: Удаляет все объекты, которые удовлетворяют данному запросу. Параметр -- запрос с таким же синтаксисом, как и пользовательский запрос. Флаги запросов на данный момент не поддерживаются. DDeelleettee oobbjjeeccttss bbyy ooiidd:: Удалить объекты(ы), указанные данными числами OID. Параметр -- список чисел OID. Числа OID могут быть получены, используя команду dumpregistry. DDiissaabbllee lloogg ttyyppee:: Отменяет ведение лог-информации о данном типе событий. Параметр -- тип события. Чтобы посмотреть список событий, см. ``Включить логи по типу''. EEnnaabbllee lloogg ttyyppee:: Включает ведение лог-информации о данном типе событий. Параметр -- имя типа события. Сейчас типы событий ограничены следующим набором: Update Вести логи по обновленным объектам. Delete Вести логи по удаленным объектам. Refresh Вести логи по восстановленным объектам. Query Вести логи по запросам пользователей. Query-Return Вести логи по объектам, возвращенным на запрос. Cleaned Вести логи по объектам, удаленным уборщиком (cleaner). Collection Вести логи о коллекционировании. Admin Вести логи об административных событиях. Admin-Return Вести логи о результатах административных событий. Bulk-Transfer Вести логи о событиях с с болшой передачей данных. Bulk-Return Вести логи об объектах, отправленных при большой передаче. Cleaner-On Вести логи о событиях очистки. Compressing-Registry Вести логи о сжатии реестра. All Вести логи о всех событиях. FFlluusshh lloogg:: Записать всю накопленную лог-информацию в текущий лог-файл. Параметров нет. GGeenneerraattee ssttaattiissttiiccss:: Генерирует основную статистику об объектах брокера в базе данных. Параметров нет. IInnddeexx cchhaannggeess:: Индексировать только объекты, которые были добавлены недавно. Параметров нет. IInnddeexx ccoorrppuuss:: Индексировать _в_с_ю базу данных объектов. Параметров нет. OOppeenn lloogg:: Открывает новый лог-файл. Если файл не существует, создает новый. Параметр - имя (относительно брокера) файла для логов. RReessttaarrtt sseerrvveerr:: Заставляет брокер прочитать заново реестр и переиндексировать все. Процесс брокера на самом деле не убивается. Параметров нет. RRoottaattee lloogg ffiillee:: Заменяет текущий лог-файл на LOG.YYYYMMDD. Открывает новый лог-файл. Параметров нет. SSeett vvaarriiaabbllee:: Устанавливает значение переменной конфигурации брокера. Принимаеи два параметра, имя переменной и ее новое значение. Переменные конфигурации, которые можно установить -- те, которые встречаются в файле _b_r_o_k_e_r_._c_o_n_f. Изменение действительно до тех пор, пока процесс брокера не умрет. SShhuuttddoowwnn sseerrvveerr:: Очевидно останавливает сервер. Параметров нет. SSttaarrtt ccoolllleeccttiioonn:: Начинает сбор. Параметров нет. DDeelleettee oollddeerr oobbjjeeccttss ooff dduupplliiccaattee UURRLLss:: Иногда брокер может прекратить работать с продублированными резюме для некоторых URL. Это может случиться, когда Gatherer меняет свое описание, имя хоста или номер порта. Используйте эту команду, чтобы брокер нашел повторяющиеся URL'ы. Когда находятся два объекта с одинаковыми URL'ами, объект с наибольшей временной меткой удаляется. 55..66..11.. УУддааллееннииее ннеежжееллааттееллььнныыхх ооббъъееккттоовв ббррооккеерраа Если вы построите брокер, а потом решите не индексировать некоторые данные (например, если вы решите разделить данные для индексирования двумя разными брокерами), вам нужно изменить конфигурационный файл Gatherer'а, перезапустить Gatherer, а потом позволить старым объектам устареть в брокере (так как брокер и Gatherer содержат отдельные базы данных). Если вы хотите вычистить данные брокера быстрее, вы можете использовать административный интерфейс брокера одним из трех способов: 1. Использовать команду 'удалить объекты по имени'. Это разумно только, если у вас небольшое число объектов, которые надо удалить. 2. Использовать 'удалить объекты по запросу'. Это может оказаться лучшей опцией, если, например, вы можете построить регулярное выражение для тех URL'ов, которые вы хотите удалить. 3. Остановить сервер, вручную удалить файлы брокера _o_b_j_e_c_t_s_/_*, а потом перезапустить брокер. Это самы простой способ, хотя если у вас большое число объектов, то для перестроения индекса потребуется много времени. Простой способ выполнить это -- перезапустить брокер, удалить все текущие объекты и сделать полную коллекцию: % mv objects objects.old % rm -rf objects.old & % broker ./admin/broker.conf -new После удаления объектов, вам следует использовать команду _и_н_д_е_к_с_и_р_о_в_а_т_ь _в_с_е. 55..66..22.. ААддммииннииссттррииррооввааннииее иизз ккооммаанндднноойй ссттррооккии Можно предоставить административные функции, используя программу brkclient из командной строки и скриптов оболочки. Например, чтобы выполнить собирание (collection), запустите: % brkclient localhost 8501 '#ADMIN #Password secret #collection' Посмотрите файл _a_d_m_i_n_._h_t_m_l вашего брокера, если хотите увидеть полный список административных команд. 55..77.. ННаассттррооййккаа ииннддееккссиирроовваанниияя GGlliimmppssee вв BBrrookkeerr''ее Система индексирования Glimpse может быть настроена различными способами, чтобы удовлетворить вашим конкретным нуждам. Наверное, больше всего внимания заслуживает параметр ``степень детализации индексирования'' (indexing granularity), для которго Glimpse предоставляет три опции: крохотный индекс (2-3% всего размера всех файлов), маленький индекс (7-8%) и средний индекс (20-30%). Времена поиска лучше с большими индексами. Изменяя опцию GGlliimmppsseeIInnddeexx--OOppttiioonn в файле _b_r_o_k_e_r_._c_o_n_f вашего брокера, вы можете настроить Glimpse для использования одной из трех опций детализации индекса. По умолчанию, GGlliimmppsseeIInnddeexx--OOppttiioonn строит средний индекс, используя программу glimpseindex. Заметьте также, что при помощи Glimpse поиск осуществляется быстрее, если выключить ``показывать совпавшие строки'' на странице запросов брокеру. Glimpse использует ``stop-list'', чтобы избежать индексирование очень распространенных слов. Этот список не фиксирован, он получается при построении индекса. По умолчанию для среднего индекса каждое слово, которое встречается по крайней мере 500 раз в 1 Mb (в среднем), помещается в stop-list. Для маленького индекса по умолчанию в stop- list помещаются слова, которые появляются в 80% всех файлов (если файло не меньше 256, иначе stop-list не создается). Установки по умолчанию можно изменить, используя опцию --SS, за которой должно стоять новое чисол (среднее в 1 Mb при использовании индексирования --bb, или % от файлов при использовании индексирования --oo). Крошечные индексы не содержат stop-list'ов (их влияние минимально). glimpseindex включает несколько других опций, которые могут быть интересными. Вы можете больше узнать об этих опциях (и о Glimpse в общем) в документации Glimpse. Если вы захотите изменить то, как брокер вызывает программу glimpseindex, то отредактируйте файл _s_r_c_/_b_r_o_k_e_r_/_G_l_i_m_p_s_e_/_i_n_d_e_x_._c в исходниках дистрибутива Harvest'а. 55..77..11.. ППррооггррааммммаа gglliimmppsseesseerrvveerr Система Glimpse поставляется со вспомогательным сервером, называемым glimpseserver, который позволяет считывать индексы в процесс и хранить в памяти. Это помогает избежать добавочной стоимости чтения индекса и запуска больших процессов для каждого поиска. glimpseserver автоматически запускается каждый раз, когда вы запускаете брокер, или заново все индексируете. Если вы не хотите запускать glimpseserver, тогда установите GGlliimmppsseeSSeerrvveerr--HHoosstt в ``false'' в вашем _b_r_o_k_e_r_._c_o_n_f. 55..88.. ИИссппооллььззооввааннииее ррааззллииччнныыхх ииннддееккссииррууюющщиихх//ппооииссккооввыыхх ссииссттеемм ввммеессттее сс BBrrookkeerr''оомм По умолчанию Harvest использует подсистему индекса/поиска Glimpse. Однако Harvest определяет гибкий интерфейс индексирования, что позволяет администраторам брокера использовать разные индексирующие/поисковые подсистемы и удовлетворять требованиям, особенным для данного домена. Например, может оказаться полезным снабдить реляционную базу данных сервером. На данный момент мы распространяем код с поддержкой интерфейса как свободного, так и коммерческого движков WAIS, Glimpse и Swish. Ниже мы обсуждаем, как использовать другие движки индекса/поиска вместо Glimpse в брокере, и коротко обсуждаем, как объединить новый движок индекса/поиска с брокером. 55..88..11.. ИИссппооллььззооввааннииее SSwwiisshh вв ккааччеессттввее ииннддееккссеерраа Harvest включает поддержку для испльзования Swish, как индексирующего движка, с брокером. Swish -- это хорошая альтернатива Glimpse, если вас нужна поддержка более быстрого поиска, и вы не желаете использовать более мощные свойства запросов. Также это иногда альтернатива, если есть проблемы со статусом прав использования Glimpse. Чтобы использовать Swish с существующим брокером, вам нужно изменить переменную _I_n_d_e_x_e_r_-_T_y_p_e в _b_r_o_k_e_r_._c_o_n_f на ``Swish''. Вы также можете указать, что вы хотите использовать Swish для брокера, когда используете команду RunHarvest, запустив: RunHarvest -swish. 55..88..22.. ИИссппооллььззооввааннииее WWAAIISS вв ккааччеессттввее ииннддееккссеерраа Поддержка использования WAIS (как freeWAIS, так и WAIS Inc.) как подсистем брокера индексирования и поиска включена в дистрибутив Harvest. WAIS -- это хорошая альтернатива Glimpse, если вас нужна поддержка более быстрого поиска, и вы не желаете использовать более мощные свойства запросов. Чтобы использовать WAIS с существующим брокером, вам нужно изменить переменную _I_n_d_e_x_e_r_-_T_y_p_e в _b_r_o_k_e_r_._c_o_n_f на ``WAIS''; вы можете выбрать вариант WAIS, установив переменную _W_A_I_S_-_F_l_a_v_o_r в _b_r_o_k_e_r_._c_o_n_f на ``Commercial-WAIS'', ``freeWAIS'' или ``WAIS''. Иначе CreateBroker спросит вас, хотите ли вы использовать WAIS и где находятся программы WAIS (waisindex, waissearch, waisserver и, в коммерческой версии WAIS, waisparse). Когда вы запустите брокер, после построения индекса автоматически запустится сервер WAIS. Вы также можете указать, что хотите использовать WAIS для брокера, когда используете команду RunHarvest, запустив: RunHarvest -wais. 55..99.. ООппииссааннииее ииннттееррффееййссаа ккооллллееккттоорраа:: CCoolllleeccttiioonn..ccoonnff Брокер получает индексную информацию от Gatherer'ов или других брокеров через свой интерфейс _C_o_l_l_e_c_t_o_r. Список точек коллекционирования указан в конфигурационном файле _a_d_m_i_n_/_C_o_l_l_e_c_t_i_o_n_._c_o_n_f. Этот файл содержит точки коллекционирования в каждой строке из 4 полей. Первое поле -- хост удаленного Gatherer'а или брокера, второе поле -- номер порта на этом хосте, третье поле -- тип кооекции, а четвертое поле -- фильтр запросов или ----, если фильтра нет. Брокер поддерживает различные типы коллекций, которые приведены ниже: Тип Удаленный процесс Описание Сжатие? --------------------------------------------------------------------- 0 Gatherer Полное коллекционирование всякий раз Нет 1 Gatherer Инкрементальное коллекционирование Нет 2 Gatherer Полное коллекционирование всякий раз Да 3 Gatherer Инкрементальное коллекционирование Да 4 Broker Полное коллекционирование всякий раз Нет 5 Broker Инкрементальное коллекционирование Нет 6 Broker Коллекционированное на основе запроса Нет 7 Broker Инкрементальное на основе запроса Нет Спецификация фильтра запроса для типов коллекций 6 и 7 содержит две части: ----QQUUEERRYY kkeeyywwoorrddss и опционально ----FFLLAAGGSS ffllaaggss. Часть ----QQUUEERRYY передается брокеру как ключевые слова для хапроса (ключевые слова могут быть любым булевским и/или структурированным запросом); часть ----FFLLAAGGSS передается брокеру как флаги запросу, в зависимости от индексера. Следующая таблица показывает действующие флаги для поддерживаемых индексеров: Индексер Флаг Описание ----------------------------------------------------------------------------- All: #desc показать строки описания Glimpse: #index case insensitive без учета регистра #index case sensitive с учетом регистра #index error number допустимо число "number" ошибок #index matchword поиск по границам слов #index maxresult number максимальное число результатов "number" #opaque показать совпавшие строки Wais: #index maxresult number максимальное число результатов "number" #opaque показать оценки и ранжирования Ниже приведен пример _C_o_l_l_e_c_t_i_o_n_._c_o_n_f, который собирает информацию с 2 Gatherer'ов (один -- сжатое инкрементальное коллекционирование, а другой -- несжатое полное) и с 3 брокеров (один -- инкрементальное на основе временной метки, а другие -- с использованием фильтров запросов): gatherer-host1.foo.com 8500 3 -- gatherer-host2.foo.com 8500 0 -- broker-host1.foo.com 8501 5 -- broker-host2.foo.com 8501 6 --QUERY (URL : document) AND gnu broker-host3.foo.com 8501 7 --QUERY Harvest --FLAGS #index case sensitive 55..1100.. УУссттррааннееннииее ннееппооллааддоокк ССииммппттоомм Брокер запущен, но всегда возвращает _e_m_p_t_y _q_u_e_r_y _r_e_s_u_l_t_s _(_п_у_с_т_о_й _р_е_з_у_л_ь_т_а_т _н_а _з_а_п_р_о_с_). РРеешшееннииее Посмотрите в файле broker.out в каталоге брокера на сообщения об ошибках. Если ваш брокер не проиндексировал данные, используйте административный интерфейс, чтобы заставить брокер построить индекс (см. раздел ``Администрирование брокера''. ССииммппттоомм Когда я отправляю запрос брокеру, я получаю "500 Server Error" (ошибка сервера 500). РРеешшееннииее В основном, ошибки ``500'' относятся к неверно работающим программам CGI или неверно сконфигурированному серверу httpd. Убедитесь, что userid пользователя, запустившего сервер HTTP имеет доступ к каталогу Harvest'а cgi-bin и файлам Perl в _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b. Обратитесь в раздел ``Дополнительная установка для Harvest Broker'' за деталями. ССииммппттоомм Я вижу _п_р_о_д_у_б_л_и_р_о_в_а_н_н_ы_е _д_о_к_у_м_е_н_т_ы в моем брокере. РРеешшееннииее Брокер предоставляет устранение дубликатов на основе комбинации контрольных сумм MD5 и хоста, имени, версии Gatherer'а. Таким образм, вы можете убрать продублированные документы, если ваш брокер собирает с более чем одного Gatherer'а, каждый из которых собирает с одного набора URL. (Как отступление, причина этого замечания о устранении дубликатов связана с тем, что отдельный брокер может содержать несколько различных объектов SOIF для одного URL, но просуммированных различными способами.) Есть два решения проблемы: 1. Запустите ваши Gatherer'ы на одном хосте. 2. Удалите продублированные URL'ы в настроенной версии программы search.cgi, проделав построчное сравнение URL. ССииммппттоомм Брокер долго работает и не отвечает на запросы. РРеешшееннииее Некоторые запросы очень тяжелые, так как вовлекают много работы с вводом/выводом. По этой причине мы модифицировали Broker, так что если запрос занимает больше чем 5 минут, процесс запроса убивается. Лучшее решение -- использовать менее тяжелые запросы, например, используя меньше распространенных ключевых слов. ССииммппттоомм Некоторые из _о_п_ц_и_й _з_а_п_р_о_с_о_в (такие как структурированные запросы или запросы с учетом регистра) _н_е _р_а_б_о_т_а_ю_т. РРеешшееннииее Обычно это означает, что вы используете движок индекса/поиска, который не поддерживает структурированных запросов. Если вы устанавливаете свой брокер (а не используете чей-то еще), обратитесь в раздел ``Использование различных индексирующих/поисковых систем вместе с Broker'ом'' за деталями о том, как переключиться на другие движки. Или может быть ваша программа search.cgi старой версии и должна быть обновлена. ССииммппттоомм Я получаю _s_y_n_t_a_x _e_r_r_o_r_s (ошибки синтаксиса), когда посылаю запрос. РРеешшееннииее Обычно это значит, что вы не испотзовали двойные кавычки, где необходимо. См. раздел ``Отправление запросов Broker'у''. ССииммппттоомм Когда я посылаю запрос, я получаю ответ _б_ы_с_т_р_е_е_, _ч_е_м_, _к_а_к _я _д_у_м_а_ю_, нужно потратить на обработку запроса, и ответ содержит _д_а_н_н_ы_е _с _м_у_с_о_р_о_м. РРеешшееннииее Вероятно, это указывает, что ваш httpd плохо сконфигурирован. Обычно не ставят 'ScriptAlias' перед 'Alias' в файле _c_o_n_f_/_h_t_t_p_d_._c_o_n_f, когда запускают Apache httpd. См. раздел ``Дополнительная установка для Harvest Broker''. ССииммппттоомм Когда я делаю _и_з_м_е_н_е_н_и_я в конфигурационном файле брокера при помощи _а_д_м_и_н_и_с_т_р_а_т_и_в_н_о_г_о _и_н_т_е_р_ф_е_й_с_а, они _т_е_р_я_ю_т_с_я после перезапуска брокера. is restarted. РРеешшееннииее Административный интерфейс брокера не сохраняет изменений при перезапуске. Постоянные изменения в конфигурации брокера следует делать в файле _b_r_o_k_e_r_._c_o_n_f. ССииммппттоомм Мой брокер _р_а_б_о_т_а_е_т _о_ч_е_н_ь _м_е_д_л_е_н_н_о. РРеешшееннииее Настройка производительности может быть сложна, но скорее всего проблема в том, что вы запускаете брокер на машине с недостаточным количеством RAM, и много записываете в своп, так как движок запросов выбрасывает страницы памяти, чтобы получить доступ к необходимому индексу и файлам с данными. (В UNIX буферный кэш диска борется с программными страницами и страницами даных за память.) Простой способ проверить -- запустить ``vmstat 5'' в одном окне, и после пары строк вывода, выполнить запрос из другого окна. Так напечатается строка с измерениями статуса виртуальной памяти вашей машины каждые 5 секунд. В частности, посмотрите на колонки ``pi'' и ``po''. Если числа вдруг прыгнут в диапазон 500-1000 после выполнения запроса, значит вы много записываете страниц памяти. Заметьте, что проблемы со страницами обостряются при одновременном запуске программ с интенсивным вводом/выводом в память или на диск. Одновременные запросы одному брокеру не должны вызывать проблем со страницами, так как брокер обрабатывает запросы последовательно. Лучше всего запускать брокер на почти не используемой машине с памятью, по меньшей мере, 128 MB (лучше больше, если вышеуказанный эксперимент с ``vmstat'' показывает, что вы записывает много страниц). Другой способ улучшить производительность - запустить _h_t_t_p_d_- _a_c_c_e_l_e_r_a_t_o_r на машине с вашим брокером, чтобы перехватывать запросы брокеру. Пока он заносит в кэш результат запросов, он снизит загрузку машины, так как он снабжен очень эффективными средствами возвращения запросов в случае пааллельных запросов. Без акселератора результаты возвращаются процессами search.cgi на каждый запрос, а ядро UNIX неэффективно делит время для этих процессов. С акселератором процессы search.cgi быстро умирают и дают акселератору вернуть результаты разным пользователям одновременно. Акселератор также снизит нагрузку для получения данных (не запросов) с вашего сервера httpd. 66.. ППррооггррааммммыы ии ррааззммеещщееннииее ууссттааннооввллееннннооггоо ППОО HHaarrvveesstt 66..11.. $$HHAARRVVEESSTT__HHOOMMEE Верхний каталог, в который вы установили Harvest, обозначим _$_H_A_R_V_E_S_T___H_O_M_E. По умолчанию _$_H_A_R_V_E_S_T___H_O_M_E -- это _/_u_s_r_/_l_o_c_a_l_/_h_a_r_v_e_s_t. В _$_H_A_R_V_E_S_T___H_O_M_E находятся следующие файлы и каталоги: RunHarvest* brokers/ gatherers/ tmp/ bin/ cgi-bin/ lib/ RunHarvest -- это скрипт, используемый для создания и запуска серверов Harvest (см. раздел ``Запуск системы: команда RunHarvest и связанные с ней команды''. RunHarvest имеет такой же синтаксис командной строки, что и Harvest. 66..22.. $$HHAARRVVEESSTT__HHOOMMEE//bbiinn Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_b_i_n содержит только те программы, которые пользователи обычно могут сразу запустить. Все другие программы (например, отдельные summarizer'ы для Gatherer'а) так же, как и библиотечный код Perl находятмя в каталоге _l_i_b. Каталог _b_i_n содержит следующие программы: CreateBroker Создает брокер. Использование: CreateBroker [skeleton-tree [destination]] Gatherer Главный пользовательский интерфейс Gatherer'а. Эта программа запускается скриптом RunGatherer, который находится в каталоге Gatherer'а. Использование: Gatherer [-manual|-export|-debug] file.cf Harvest Эта программа используется RunHarvest для создания и запуска серверов Harvest согласно описанию пользователя. Использование: Harvest [flags] Где флаги (flags) могут быть следующие: -novice Простейшая форма вопрос-ответ. В основном использует установки по умолчанию. -glimpse Использовать Glimpse для брокера. (по умолчанию) -swish Использовать Swish для брокера. -wais Использовать WAIS для брокера. -dumbtty Немой режим TTY. -debug Режим отладки. -dont-run Не запускать брокер и Gatherer. -fake Не строить сервера Harvest. -protect Не менять umask. broker Программа Broker. Эта программа запускается скриптом RunBroker, который находится в каталоге брокера. Записывает лог-сообщения как в _b_r_o_k_e_r_._o_u_t, так и в _a_d_m_i_n_/_L_O_G. Использование: broker [broker.conf file] [-nocol] gather Клиентский интерфейс Gatherer'а. Использование: gather [-info] [-nocompress] host port [timestamp] 66..33.. $$HHAARRVVEESSTT__HHOOMMEE//bbrrookkeerrss Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_b_r_o_k_e_r_s содержит картинки и логотипы в каталоге _i_m_a_g_e_s, некоторые основные учебные HTML страницы и файлы-скелеты, которые использует CreateBroker для построения новых брокеров. Вы можете изменить значения по умолчанию в этих создаваемых брокерах, отредактировав файлы в _s_k_e_l_e_t_o_n. 66..44.. $$HHAARRVVEESSTT__HHOOMMEE//ccggii--bbiinn Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_c_g_i_-_b_i_n содержит программы, необходимые для WWW интерфейса брокера (описанного в разделе ``Программы CGI'') и конфигурационные файлы для search.cgi в каталоге _l_i_b. 66..55.. $$HHAARRVVEESSTT__HHOOMMEE//ggaatthheerreerrss Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_g_a_t_h_e_r_e_r_s содержит примеры Gatherer, обсуждаемые в разделе ``Примеры Gatherer'ов''. RunHarvest по умолчанию создаст новый Gatherer в этом каталоге. 66..66.. $$HHAARRVVEESSTT__HHOOMMEE//lliibb Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b содержит много функций библиотеки Perl и другие программы, необходимые различным частям Harvest'а, например, следующие: _c_h_a_t_2_._p_l_, _f_t_p_._p_l_, _s_o_c_k_e_t_._p_h Библиотеки Perl, используемые для соединения с удаленными серверами FTP. _d_a_t_e_c_o_n_v_._p_l_, _l_s_p_a_r_s_e_._p_l_, _t_i_m_e_l_o_c_a_l_._p_l Библиотеки Perl, используемые для разбора выхода ls. ftpget Программа, используемая для получения файлов и каталогов с серверов FTP. Использование: ftpget [-htmlify] localfile hostname filename A,I username password gopherget.pl Программа Perl для получения файлов и меню с серверов Gopher. Использование: gopherget.pl localfile hostname port command harvest-check.pl Программа Perl для проверки, запущены ли брокеры и gatherer'ы. Использование: harvest-check.pl [-v] md5 Программа для вычисления контрольных сумм MD5. Использование: md5 file [...] newsget.pl Программа Perl для получения статей и резюме групп USENET с серверов NNTP. Использование: newsget.pl localfile news-URL _s_o_i_f_._p_l_, _s_o_i_f_-_m_e_m_-_e_f_f_i_c_i_e_n_t_._p_l Библиотека Perl для обработки SOIF. urlget Программа для извлечения данных с URL. Использование: urlget URL urlpurge Программа чистки локального URL кэша, используемая urlget и Gatherer'ом. Использование: urlpurge 66..77.. $$HHAARRVVEESSTT__HHOOMMEE//lliibb//bbrrookkeerr Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_b_r_o_k_e_r содержит поисковые и индексные программы, необходимые брокеру, а также несколько утилит для администрирования брокера: BrokerRestart Эта программа выполнит команду перезапуска брокера. Использование: BrokerRestart [-password passwd] host port brkclient Клиентский интерфейс брокера. Может быть использован для отправления запросов или административных команд брокеру. Использование: brkclient hostname port command-string dumpregistry Печатает файл-реестр брокера в удобном для чтения формате. Использование: dumpregistry [-count] [BrokerDirectory] agrep, glimpse, glimpseindex, glimpseserver Система индекса и поиска Glimpse, описанная в разделе ``Broker''. swish Программа индекса и поиска Swish как альтернатива Glimpse. info-to-html.pl, mkbrokerstats.pl Программы Perl для генерирования статистики брокера и создания _s_t_a_t_s_._h_t_m_l. Использование: gather -info host port | info-to-html.pl > host.port.html Использование: mkbrokerstats.pl broker-dir > stats.html 66..88.. $$HHAARRVVEESSTT__HHOOMMEE//lliibb//ggaatthheerreerr Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_l_i_b_/_g_a_t_h_e_r_e_r содержит summarizer'ы, описанные в разделе ``Получение данных для индексации: подсистема суммирования Essence'', а также различные утилиты, необходимые summarizer'ам и Gatherer'у, как например: _U_R_L_-_f_i_l_t_e_r_-_d_e_f_a_u_l_t Фильтр URL по умолчанию, описанный в разделе ``Описание RootNode''. _b_y_c_o_n_t_e_n_t_._c_f_, _b_y_n_a_m_e_._c_f_, _b_y_u_r_l_._c_f_, _m_a_g_i_c_, _s_t_o_p_l_i_s_t_._c_f_, _q_u_i_c_k_-_s_u_m_._c_f Конфигурационные файлы Essence, описанные в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''. *.sum Summarizer'ы Essence, описанные в разделе ``Получение данных для индексации: подсистема суммирования Essence''. HTML-sum.pl Альтернативные HTML summarizer'ы, написанные на Perl. HTMLurls Программы для извлечения URL'ов из файлов HTML. Использование: HTMLurls [--base-url url] filename catdoc, xls2csv, _c_a_t_d_o_c_-_l_i_b Программы и файлы, используемые summarizer'ом Microsoft Word. dvi2tty, print-c-comments, ps2txt, ps2txt-2.1, pstext, skim" Программы, используемы разными summarizer'ами. gifinfo Программа для поддержки summarizer'ов. l2h Программа, используемая summarizer'ом TeX. rast, smgls, sgmlsasp, _s_g_m_l_s_-_l_i_b Программы и файлы для SGML summarizer'а. rtf2html Программа для RTF summarizer'а. wp2x, wp2x.sh, _w_p_2_x_-_l_i_b Программы и файлы для WordPerfect summarizer'а. hexbin, unshar, uudecode Программы для извлечения упакованных объектов. cksoif Программы для проверки точности потока SOIF (например, чтобы убедиться, что нет ошибок разбора). Использование: cksoif < INPUT.soif cleandb, consoldb, expiredb, folddb, mergedb, mkgathererstats.pl, mkindex, rmbinary" Программы для подготовки базы данных Gatherer'а для экспорта при помощи gatherd. cleandb удостоверяется в том, что все объекты SOIF не содержат ошибок, и удалaет все объекты с ошибками; consoldb объединяет n файлов баз данных GDBM в один файл; expiredb удаляет все объекты SOIF, которые устарели согласно атрибту _T_i_m_e_-_t_o_-_L_i_v_e (время жизни); folddb проделывает все необходимые операции, необходимые для подготовки базы данных Gatherer'а к экспорту при помощи gatherd; mergedb объединяет файлы GDBM, как описано в разделе ``Включение в Gatherer информации, сгенерированной вручную''; mkgathererstats.pl генерирует файл статистики _I_N_F_O_._s_o_i_f mkindex генерирует кэш временных меток; rmbinary удаляет двоичные данные из базы данных GDBM. enum, prepurls, staturl Программы, используемые Gatherer'ом для нумерации RootNode и LeafNode, как описано в разделе ``Описание RootNode''. enum выполняет нумерацию RootNode данных URL'ов; prepurls -- программа-упаковщик для взаимодействия Gatherer'а и essence; staturl получает LeafNode URL и определяет изменился URL или нет. fileenum, ftpenum, ftpenum.pl, gopherenum-*, httpenum-*, newsenum" Программы, используемые enum, чтобы выполнять нумерацию в зависимости от протокола. fileenum выполняет нумерацию RootNode для URL'ов типа ``file''; ftpenum вызывает ftpenum.pl для выполнения нумерации RootNode URL'ов по ``ftp''; gopherenum-breadth выполняет широкую нумерацию RootNode для URL'ов типа ``gopher''; gopherenum-depth выполняет глубокую нумерацию RootNode для URL'ов типа ``gopher''; httpenum-breadth выполняет широкую нумерацию RootNode для URL'ов типа ``http''; httpenum-depth выполняет глубокую нумерацию RootNode для URL'ов типа ``http''; newsenum выполняет нумерацию RootNode для ``news'' URL'ов; essence Система извлечения содержимого Essence, описанная в разделе ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''. Использование: essence [options] -f input-URLs или essence [options] URL ... где опции (options): --dbdir directory Каталог для размещения базы данных --full-text Использовать весь файл вместо суммирования --gatherer-host Хост Gatherer'а --gatherer-name Имя Gatherer'а --gatherer-version Версия Gatherer'а --help Выдает информацию об использовании --libdir directory Каталог для размещения конфигурационных файлов --log logfile Имя файла для лог-сообщений --max-deletions n Число удалений GDBM перед реорганизацией --minimal-bookkeeping Генерирует минимальное число атрибутов учета ресурсов --no-access Не читать содержимое объектов --no-keywords Не генерировать автоматически ключевые слова --allowlist filename Файл со списком допустимых типов --stoplist filename Файл со списком типов, которые нужно удалять --tmpdir directory Имя каталога для временных файлов --type-only Только выдавать данные, не суммировать объекты --verbose Более полный вывод --version Информация о версии print-attr Читает поток SOIF из stdin и печатает данные, связанные с данным атрибутом, на stdout. Использование: cat SOIF-file | print-attr Attribute gatherd, in.gatherd Демоны, которые экспортируют базу данных Gatherer'а. in.gatherd используется для запуска этого демона из inetd. Использование: gatherd [-db | -index | -log | -zip | -cf file] [-dir dir] port Использование: in.gatherd [-db | -index | -log | -zip | -cf file] [-dir dir] gdbmutil Программа для выполнения различных действий над базой данных GDBM. Использование: gdbmutil consolidate [-d | -D] master-file file [file ...] Использование: gdbmutil delete file key Использование: gdbmutil dump file Использование: gdbmutil fetch file key Использование: gdbmutil keys file Использование: gdbmutil print [-gatherd] file Использование: gdbmutil reorganize file Использование: gdbmutil restore file Использование: gdbmutil sort file Использование: gdbmutil stats file Использование: gdbmutil store file key < data mktemplate Программа для генерирования правильных SOIF на основе более простого редактируемого формата, подобногоSOIF (например, SOIF без подсчета байтов). Использование: mktemplate < INPUT.txt > OUTPUT.soif quick-sum Простоая программа Perl для эмулирования обработки _q_u_i_c_k_-_s_u_m_._c_f Essence для тех, кто не может откомпилировать Essence с соответствующим кодом на C. template2db Конвертирует поток объетов SOIF (из stdin или данных файлов) в базу данных GDBM. Использование: template2db database [tmpl tmpl...] wrapit Преобразует данные из stdin в пары SOIF атрибут-значение с подсчетом байт. Используется summarizer'ами Essence и легко гнерирует SOIf. Использование: wrapit [Attribute] kill-gatherd Скрипт для убивания процесса gatherd. 66..99.. $$HHAARRVVEESSTT__HHOOMMEE//ttmmpp Каталог _$_H_A_R_V_E_S_T___H_O_M_E_/_t_m_p используется search.cgi для хранения страниц результатов поиска. 77.. ФФооррммаатт ввззааииммооооббммееннаа ккррааттккииммии ииззллоожжеенниияяммии ддооккууммееннттоовв ((SSOOIIFF)) Gatherer'ы и Broker'ы Harvest взаимодействуют используя протокол потока пар атрибут-значение, который называется форматом взаимообмена краткими изложениями документов (_S_u_m_m_a_r_y _O_b_j_e_c_t _I_n_t_e_r_c_h_a_n_g_e _F_o_r_m_a_t_, _S_O_I_F_), пример которого есть в разделе ``Пример 1''. Gatherer'ы генерируют резюме содержимого для отдельных объектов в формате SOIF и предоставляют эти резюме брокерам, которые хотят их собрать и проиндексировать. SOIF предоставляет средства для передачи резюме содержимого объектов брокерам от Gatherer'а в формате SOIF для многих объектов в одном, эффективном сжатом потоке. Брокеры Harvest имеют поддержку для выполнения запросов к данным SOIF, используя структурированные запросы вида атрибут-значение и много других типов запросов, что обсуждается в разделе ``Отправление запросов Broker'у''. 77..11.. ФФооррммааллььннооее ооппииссааннииее SSOOIIFF Грмматика SOIF следующая: SOIF ::= OBJECT SOIF | OBJECT OBJECT ::= @ TEMPLATE-TYPE { URL ATTRIBUTE-LIST } ATTRIBUTE-LIST ::= ATTRIBUTE ATTRIBUTE-LIST | ATTRIBUTE ATTRIBUTE ::= IDENTIFIER {VALUE-SIZE} DELIMITER VALUE TEMPLATE-TYPE ::= Alpha-Numeric-String IDENTIFIER ::= Alpha-Numeric-String VALUE ::= Arbitrary-Data VALUE-SIZE ::= Number DELIMITER ::= ":<tab>" 77..22.. ССппииссоокк ооббщщиихх ииммеенн ааттррииббууттоовв SSOOIIFF Каждый брокер может поддерживать различные атрибуты, в зависимости от данных, которые он хранит. Ниже мв приводим список наиболее общих атрибутов: Abstract Краткий обзор объекта. Author Автор(ы) объекта. Description Краткое описание объекта. File-Size Число байт в объекте. Full-Text Все содержимое объекта. Gatherer-Host Хост, на котором Gatherer запущен для извлечения информации об объекте. Gatherer-Name Имя Gatherer'а, который извлекает информацию об объекте. (например, Full-Text (весь текст), Selected-Text (выбранный текст) или Terse (сжатый)). Gatherer-Port Номер порта на хосте Gatherer'а, который обслуживает информацию Gatherer'а. Gatherer-Version Номер версии Gatherer'а. Update-Time Время, когда Gatherer обновлял резюме содержимого объекта. ТРЕБУЕМОЕ поле. Нет значения по умолчанию. Keywords Ключевые слова для поиска, извлеченные из объекта. Last-Modification-Time Время, когда объект был модифицирован последний раз. MD5 16-байтная контрольная сумма MD5 объекта. Refresh-Rate Число секунд после времени Update-Time, по истечнии которых резюме объекта должно быть регенерировано. По умолчанию -- 1 месяц. Time-to-Live Число секунд после времени Update-Time, по исечении которых резюме объекта больше не действительно. По умолчанию -- 6 месяцев. Title Заголовок объекта. Type Тип объекта. Ниже приведены некоторые примеры типов: Archive Audio Awk Backup Binary C CHeader Command Compressed CompressedTar Configuration Data Directory DotFile Dvi FAQ FYI Font FormattedText GDBM GNUCompressed GNUCompressedTar HTML Image Internet-Draft MacCompressed Mail Makefile ManPage Object OtherCode PCCompressed Patch Pdf Perl PostScript RCS README RFC RTF SCCS ShellArchive Tar Tcl Tex Text Troff Uuencoded WaisSource URI Uniform Resource Identifier - универсальный идентификатор ресурса. URL-References Любые ссылки URL, присутствующие в объектах HTML. 88.. ППррииммееррыы GGaatthheerreerr Следующие примеры устанавливаются в _$_H_A_R_V_E_S_T___H_O_M_E_/_g_a_t_h_e_r_e_r_s по умолчанию (см. раздел ``Установка ПО Harvest''). Дистрибутив Harvest содержит несколько примеров того, как конфигурировать, настраивать и запусктаь Gatherer'ы. Это раздел проведет вас через некоторые примеры Gatherer'ов. Цель -- дать вам почувствовать, что вы можете делать с Gatherer'ом и как это делать. Вам не обязательно прорабатывать все эти примеры; каждый из них поучителен по-своему. Чтобы использовать примеры Gatherer'ов, вам нужно определить каталог bin Harvest'а в вашей переменной пути, и определить _H_A_R_V_E_S_T___H_O_M_E. Например: % setenv HARVEST_HOME /usr/local/harvest % set path = ($HARVEST_HOME/bin $path) 88..11.. ППррииммеерр 11 -- ппррооссттоойй GGaatthheerreerr Этот пример -- это простой Gatherer, который использует установки по умолчанию. Единственное, что нужно сделать пользователю для работы с этим Gatherer'ом -- это указать список URL'ов, из которых собирать данные (см. раздел ``Gatherer''). Чтобы запустить этот пример, наберите: % cd $HARVEST_HOME/gatherers/example-1 % ./RunGatherer Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите _e_x_a_m_p_l_e_-_1_._c_f. Первые несколько строчек -- это переменные, которые указывают некоторую локальную информацию о Gatherer'е (см. раздел ``Задание значений переменных в конфигурационном файле Gatherer'а''). Например, каждое резюме содержимого будет содержать имя Gatherer'а (GGaatthheerreerr--NNaammee), который сгенерировал его, номер порта (GGaatthheerreerr-- PPoorrtt), который будет использоваться для экспорта индексной информации, каталог, который содержит Gatherer (TToopp--DDiirreeccttoorryy). Заметьте, что есть один RootNode URL и один LeafNode URL. После того, как Gatherer закончит, он запустит демон Gatherer, который будет экспортировать резюме содержимого. Чтобы посмотреть резюме, наберите: % gather localhost 9111 | more Следующий объект SOIF должен выглядеть примерно как тот, который сгенерирует этот Gatherer. @FILE { http://harvest.cs.colorado.edu/~schwartz/IRTF.html Time-to-Live{7}: 9676800 Last-Modification-Time{1}: 0 Refresh-Rate{7}: 2419200 Gatherer-Name{25}: Example Gatherer Number 1 Gatherer-Host{22}: powell.cs.colorado.edu Gatherer-Version{3}: 0.4 Update-Time{9}: 781478043 Type{4}: HTML File-Size{4}: 2099 MD5{32}: c2fa35fd44a47634f39086652e879170 Partial-Text{151}: research problems Mic Bowman Peter Danzig Udi Manber Michael Schwartz Darren Hardy talk talk Harvest talk Advanced Research Projects Agency URL-References{628}: ftp://ftp.cs.colorado.edu/pub/cs/techreports/schwartz/RD.ResearchProblems.Jour.ps.Z ftp://grand.central.org/afs/transarc.com/public/mic/html/Bio.html http://excalibur.usc.edu/people/danzig.html http://glimpse.cs.arizona.edu:1994/udi.html http://harvest.cs.colorado.edu/~schwartz/Home.html http://harvest.cs.colorado.edu/~hardy/Home.html ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/HPCC94.Slides.ps.Z ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/HPC94.Slides.ps.Z http://harvest.cs.colorado.edu/harvest/Home.html ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/IETF.Jul94.Slides.ps.Z http://ftp.arpa.mil/ResearchAreas/NETS/Internet.html Title{84}: IRTF Research Group on Resource Discovery IRTF Research Group on Resource Discovery Keywords{121}: advanced agency bowman danzig darren hardy harvest manber mic michael peter problems projects research schwartz talk udi } Заметьте, что хотя конфигурационный файл Gatherer'а содержит только 2 URL'а (один в разделе RootNode и один в разделе LeafNode), появилось больше, чем 2 резюме в базе данных Gatherer'а. Gatherer развернул RootNode URL на десятки LeafNode URL'ов рекурсивно извлекая ссылки из файла HTML _h_t_t_p_:_/_/_h_a_r_v_e_s_t_._c_s_._c_o_l_o_r_a_d_o_._e_d_u_/. Далее, для каждого данного LeafNode в Gatherer'е, было сгенерировано резюме, как в приведенном выше примере для _h_t_t_p_:_/_/_h_a_r_v_e_s_t_._c_s_._c_o_l_o_r_a_d_o_._e_d_u_/_~_s_c_h_w_a_r_t_z_/_I_R_T_F_._h_t_m_l. Summarizer HTML извлечет структурированную информацию об авторе и заголовке файла. Он также извлечет любые ссылки URL в атрибут _U_R_L_- _R_e_f_e_r_e_n_c_e_s, а любой тэг привязки anchor -- в атрибут _P_a_r_t_i_a_l_-_T_e_x_t. Остальная информация о файле HTML, такая как его сумма MD5 (см. RFC1321) и его размер (_F_i_l_e_-_S_i_z_e) в байтах также добавится в резюме содержимого. 88..22.. ППррииммеерр 22 -- ввккллююччееннииее ииннффооррммааццииии,, ссггееннеерриирроовваанннноойй ввррууччннууюю Gatherer способен ``разорвать'' ресурс в поток резюме. Это полезно для файлов, которые содержат информацию, сгенерированную вручную, которая может описывать один или более ресурсов, или для построения шлюза между разными структурированными форматыми и SOIF (см. раздел ``Формат взаимообмена краткими изложениями документов (SOIF)''. Этот пример демонстрирует ``взрыватель'' (exploder) для формата Linux Software Map (LSM). Файлы LSM содержат структурированную информацию (как автор, размещение и т.д.) о доступном ПО для операционных систем Linux. Чтобы запустить это пример, наберите: % cd $HARVEST_HOME/gatherers/example-2 % ./RunGatherer Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите _e_x_a_m_p_l_e_-_2_._c_f. Заметьте, что Gatherer имеет свой каталог _L_i_b_-_D_i_r_e_c_t_o_r_y (обратитесь в раздел ``Задание значений переменных в конфигурационном файле Gatherer'а'' за помощью в написании конфигурационных файлов). Каталог библиотеки содержит настройки для типов и выбора кандидатов Essence. В этом примере, мы только настроили шаг выбора кандидатов. _l_i_b_/_s_t_o_p_l_i_s_t_._c_f определяет типы, которые Essence должен проиндексировать. Этот пример использует пустой файл _s_t_o_p_l_i_s_t_._c_f, что говорит Essence индексировать все файлы. Gatherer получает каждый из LeafNode URL'ов, которые являются файлами в формате Linux Software Map в FTP архиве Linux _t_s_x_-_1_1_._m_i_t_._e_d_u. Gatherer понимает, что файл ``.lsm'' -- это файл типа _L_S_M, так как в _l_i_b_/_b_y_n_a_m_e_._c_f присутствует эвристика по имени.Тип _L_S_M -- это упакованный тип, что указано в исходном коде Essence (_s_r_c_/_g_a_t_h_e_r_e_r_/_e_s_s_e_n_c_e_/_u_n_n_e_s_t_._c). Для упакованных типов запускаются программы Exploder (называемые TypeName.unnest), а не обычные summarizer'ы. Программа LSM.unnest -- это стандартная программа exploder, которая берет файл _L_S_M и генерирует один или более соотвествующих объектов SOIF. Когда Gatherer завершает работу, он содержит один или более соответствующих объектов SOIF для ПО, описанного в каждом файле _L_S_M. Потом Gatherer запускает демон Gatherer, который будет предоставлять резюме содержимого объектов. Чтобы посмотреть резюме, наберите: % gather localhost 9222 | more Так как _t_s_x_-_1_1_._m_i_t_._e_d_u -- популярный и загруженный архив, Gatherer часто не сможет получить файлы LSM. Если вы подозреваете, что что-то подобное случилось, посмотрите _l_o_g_._e_r_r_o_r_s и _l_o_g_._g_a_t_h_e_r_e_r, чтобы определить проблему. Следующие два объекта SOIF были сгенерированы этим Gatherer'ом. Первый объект -- описывает сам файл _L_S_M, а второй -- ПО, описанное в файле _L_S_M. @FILE { ftp://tsx-11.mit.edu/pub/linux/docs/linux-doc-project/man-pages-1.4.lsm Time-to-Live{7}: 9676800 Last-Modification-Time{9}: 781931042 Refresh-Rate{7}: 2419200 Gatherer-Name{25}: Example Gatherer Number 2 Gatherer-Host{22}: powell.cs.colorado.edu Gatherer-Version{3}: 0.4 Type{3}: LSM Update-Time{9}: 781931042 File-Size{3}: 848 MD5{32}: 67377f3ea214ab680892c82906081caf } @FILE { ftp://ftp.cs.unc.edu/pub/faith/linux/man-pages-1.4.tar.gz Time-to-Live{7}: 9676800 Last-Modification-Time{9}: 781931042 Refresh-Rate{7}: 2419200 Gatherer-Name{25}: Example Gatherer Number 2 Gatherer-Host{22}: powell.cs.colorado.edu Gatherer-Version{3}: 0.4 Update-Time{9}: 781931042 Type{16}: GNUCompressedTar Title{48}: Section 2, 3, 4, 5, 7, and 9 man pages for Linux Version{3}: 1.4 Description{124}: Man pages for Linux. Mostly section 2 is complete. Section 3 has over 200 man pages, but it still far from being finished. Author{27}: Linux Documentation Project AuthorEmail{11}: DOC channel Maintainer{9}: Rik Faith MaintEmail{16}: faith@cs.unc.edu Site{45}: ftp.cs.unc.edu sunsite.unc.edu tsx-11.mit.edu Path{94}: /pub/faith/linux /pub/Linux/docs/linux-doc-project/man-pages /pub/linux/docs/linux-doc-project File{20}: man-pages-1.4.tar.gz FileSize{4}: 170k CopyPolicy{47}: Public Domain or otherwise freely distributable Keywords{10}: man pages Entered{24}: Sun Sep 11 19:52:06 1994 EnteredBy{9}: Rik Faith CheckedEmail{16}: faith@cs.unc.edu } Мы также построили Gatherer, который переводит около пяти индесных файлов из различных PC архивов в более, чем 25000 резюме. Каждый из этих индексных файлов содержит сотни однострочных описаний о программном обеспечении, которые доступны по анонимному доступу FTP. 88..33.. ППррииммеерр 33 -- ННаассттррооййккаа рраассппооззннаавваанниияя ттииппоовв ии ввыыббоорраа ккааннддииддааттоовв Этот пример демонстрирует, как настроить шаги распознавание типов и выбора кандидатов в Gatherer'е (см. раздел ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''). Этот Gatherer распознает страницы WWW, и он сконфигурирован только для собирания индексной информации с этих страниц. Чтобы запустить этот пример, наберите: % cd $HARVEST_HOME/gatherers/example-3 % ./RunGatherer Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите _e_x_a_m_p_l_e_-_3_._c_f. Как в разделе ``Пример 2'', этот Gatherer имеет свой библиотечный каталог, который содержит настройки Essence. Так как мы заинтересованы только в индексировании домашних страниц, нам нужно только определить эвристику для распознавания домашних страниц. Как показано ниже, мы можем использовать эвристику по именам URL для определения домашних страниц в _l_i_b_/_b_y_u_r_l_._c_f. Мы также добавили тип по умолчанию _U_n_k_n_o_w_n, чтобы сделать выбор кандидатов проще. HomeHTML ^http:.*/$ HomeHTML ^http:.*[hH]ome\.html$ HomeHTML ^http:.*[hH]ome[pP]age\.html$ HomeHTML ^http:.*[wW]elcome\.html$ HomeHTML ^http:.*/index\.html$ Конфигурационный файл _l_i_b_/_s_t_o_p_l_i_s_t_._c_f содержит список типов, которые не надо индексировать. В этом примере _U_n_k_n_o_w_n -- это единственный тип, занесенный в этот список, так что Gatherer будет отклонятьт только файлы типа _U_n_k_n_o_w_n. Вы можете также распознавать URL'ы по именам файлов (в _b_y_n_a_m_e_._c_f) или по содержимому (в _b_y_c_o_n_t_e_n_t_._c_f и _m_a_g_i_c); хотя в этом примере, нам не нужно использовать эти механизмы. Summarizer HomeHTML.sum, установленный по умолчанию, суммирует все файлы _H_o_m_e_H_T_M_L. После того, как Gatherer закончит работу, он запустит демон Gatherer, который будет предоставлять резюме содержимого объектов. Вы заметите, что присутствуют только резюме для файлов HomeHTML. Чтобы посмотреть резюме, наберите: % gather localhost 9333 | more 88..44.. ППррииммеерр 44 -- ннаассттррооййккаа рраассппооззннаавваанниияя ттииппоовв ии ссууммммииррооввааннииее Этот пример демонстрирует, как настроить шаги распознавания типов и суммирования в Gatherer'е (см. раздел ``Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования''. Gatherer распознает два новых формата файлов и суммирует их должным образм. Чтобы посмотреть конфигурационный файл Gatherer'а, посмотрите _e_x_a_m_p_l_e_-_4_._c_f. Как в примерах в ``Пример 2'' и ``Пример 3'', этот Gatherer имеет свой библиотечный каталог, который содержит конфигурационные файлы Essence. Конфигурационные файлы Essence такие же, как и для настроек по умолчанию, кроме _l_i_b_/_b_y_n_a_m_e_._c_f, который содержит две настройки для новых форматов файлов. 88..44..11.. ИИссппооллььззооввааннииее ррееггуулляяррнныыхх ввыырраажжеенниийй ддлляя ссууммммиирроовваанниияя ффооррммааттаа Первый новый формат -- тип ``ReferBibliographic'', который относится к использованию программ для представления библиографической информации. Чтобы понять, что файл записан в этом формате, мы будем использовать соглашение, что имена файлов заканчиваются на ``.referbib''. Таким образом, мы добавим эвристику по имени для настройки распознвания типов. Эвристика по именам представляется в виде регулярного выражения напротив имени файла в _l_i_b_/_b_y_n_a_m_e_._c_f: ReferBibliographic ^.*\.referbib$ Теперь, чтобы написать summarizer для этого типа, нам понадобится образец файла ReferBibliographic: %A A. S. Tanenbaum %T Computer Networks %I Prentice Hall %C Englewood Cliffs, NJ %D 1988 Summarizer'ы Essence извлекают структурированную информацию из файлов. Один способ написать summarizer -- использовать регулярные выражения для определения, что надо извлекать. Для каждого типа информации, который вы хотите извлечь из файла, добавьте регулярное выражение, которое подойдет для нужных строк в файл _l_i_b_/_q_u_i_c_k_-_s_u_m_._c_f. Например, следующие регулярные выражения в _l_i_b_/_q_u_i_c_k_-_s_u_m_._c_f извлекут автора, заглавие, дату и другую информацию из файлов ReferBibliographic: ReferBibliographic Author ^%A[ \t]+.*$ ReferBibliographic City ^%C[ \t]+.*$ ReferBibliographic Date ^%D[ \t]+.*$ ReferBibliographic Editor ^%E[ \t]+.*$ ReferBibliographic Comments ^%H[ \t]+.*$ ReferBibliographic Issuer ^%I[ \t]+.*$ ReferBibliographic Journal ^%J[ \t]+.*$ ReferBibliographic Keywords ^%K[ \t]+.*$ ReferBibliographic Label ^%L[ \t]+.*$ ReferBibliographic Number ^%N[ \t]+.*$ ReferBibliographic Comments ^%O[ \t]+.*$ ReferBibliographic Page-Number ^%P[ \t]+.*$ ReferBibliographic Unpublished-Info ^%R[ \t]+.*$ ReferBibliographic Series-Title ^%S[ \t]+.*$ ReferBibliographic Title ^%T[ \t]+.*$ ReferBibliographic Volume ^%V[ \t]+.*$ ReferBibliographic Abstract ^%X[ \t]+.*$ Первое поле в _l_i_b_/_q_u_i_c_k_-_s_u_m_._c_f -- это имя типа. Второе поле -- атрибут, под которым надо извлекать информацию в строках, удовлетворяющих регулярному выражению из третьего поля. 88..44..22.. ИИссппооллььззооввааннииее ппррооггрраамммм ддлляя ссууммммиирроовваанниияя ффооррммааттаа Второй новый формат -- это тип ``Abstract'', который является файлом, содержащим только текст с кратким описанием статьи (формат, который является принятым в технических отчетах архивов FTP). Чтобы распознать, что файл написан в этом формате, мы используем соглашение, что имена файлов типа ``Abstract'' заканчиваются на ``.abs''. Таким образом, мы добавим настройку распознавания типов в файл _l_i_b_/_b_y_n_a_m_e_._c_f в виде регулярного выражения: Abstract ^.*\.abs$ Другой способ написания summarizer'а -- написать программу или скрипт, который принимает имя файла как первый аргумент командной строки, извлекает структурированную информацию, затем выдает результат в виде списка пар SOIF атрибут-значение. Программы Summarizer называется TypeName.sum, так что мы назовем наш новый summarizer Abstract.sum. Не забудьте поместить программу в каталог, который есть в вашей переменной пути, чтобы Gatherer мог запустить ее. Вы увидите ниже, что Abstract.sum -- это скрипт оболочки Bourne, который берет первые 50 строк файла, объявляет их атрибутом ``Abstract'' и выдает в виде пары SOIF атрибут-значение. #!/bin/sh # # Usage: Abstract.sum filename # head -50 "$1" | wrapit "Abstract" 88..44..33.. ЗЗааппуусскк ппррииммеерраа Чтобы запустить этот пример, наберите: % cd $HARVEST_HOME/gatherers/example-4 % ./RunGatherer После того, как Gatherer закончит свою работу, он запустит демон Gatherer, который будет предоставлять резюме содержимого объектов. Чтобы посмотреть резюме, наберите: % gather localhost 9444 | more 88..55.. ППррииммеерр 55 -- ИИссппооллььззооввааннииее ффииллььттрроовв RRoooottNNooddee Этот пример демонстрирует, как использовать фильтры RootNode для настройки выбора кандидатов в Gatherer'е (см. раздел ``Фильтры RootNode''). Только объекты, которые пройдут через фильтры, будут получены по сети (см. раздел ``Нумерация Gatherer'а и выбор кандидатов''). Чтобы запустить этот пример, наберите: % cd $HARVEST_HOME/gatherers/example-5 % ./RunGatherer После того, как Gatherer закончит свою работу, он запустит демон Gatherer, который будет предоставлять резюме содержимого объектов. Чтобы посмотреть резюме, наберите: % gather localhost 9555 | more 99.. ИИссттоорриияя HHaarrvveesstt 99..11.. ИИссттоорриияя HHaarrvveesstt ╥ 1996-01-31: Harvest 1.4pl2 был последним официальным выпуском Darren R. Hardy, Michael F. Schwartz, и Duane Wessels. ╥ 1997-04-21: Simon Wilkinson выпустил Harvest 1.5. ╥ 1998-06-12: Simon Wilkinson выпустил Harvest 1.5.20. ╥ 1999-05-26: Выпущен Harvest-MathNet100.tar.gz. ╥ 2000-01-14: Выпущен harvest-modified-by-RL-Stajsic.tar.gz. ╥ 2000-02-07: Harvest 1.6.1 выпустил Kang-Jin Lee при содействии с Simon Wilkinson. ╥ 2002-10-01: Harvest 1.8.0 выпустили Harald Weinreich и Kang-Jin Lee. 99..22.. ИИссттоорриияя ддооккууммееннттааццииии HHaarrvveesstt ╥ 1996-01-31: Документация Harvest для Harvest 1.4.pl2 была написана Darren R. Hardy, Michael F. Schwartz и Duane Wessels. Документ был написан в LaTeX. Стали также доступны версии HTML (конвертированный при помощи LaTeX2HTML) и Postscript. ╥ 2001-04-27:HTML версия этого документа была обновлена и добавлена к дистрибутиву Harvest Kang-Jin Lee. Значительные изменения -- удаления разделов о кэше объектов Harvest и о Replicator'е, которые больше не являются частями Harvest. ╥ 2002-01-28: Эта документация была конвертирована в linuxdoc. Сейчас она доступна в форматах PostScript, PDF, text и HTML. ╥ 2003-04-22: Документация доступна на русском языке в формате HTML (Andrei Malashevich). ╥ 2003-10-15: Документация доступна на русском языке в формате SGML (Andrei Malashevich).