След Пред Содержание

## 5. Broker

## 5.1 Обзор

Broker получает индексную информацию от Gatherer'ов и других брокеров и управляет ею, а также предлагает вебинтерфейс для запросов к индексируемой информации.

## 5.2 Начальная установка

Брокер автоматически запускается командой `RunHarvest`. Другие подобные команды описываются в разделе Запуск системы: команда RunHarvest и связанные с ней команды.

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

Как показано на рисунке 1, брокер использует гибкий интерфейс индексирования, который поддерживает множество подсистем индексирования. По умолчанию брокер Harvest'а использует Glimpse в качестве индексатора, но также с брокером работают другие индексаторы, как Swish и WAIS (как свободный freeWAIS, так и коммерческий WAIS) (см. раздел Использование различных индексирующих/поисковых систем вместе с Broker'ом).

Для создания нового брокера запустите программу `CreateBroker`. Она задаст вам ряд вопросов о том, как бы вы хотели сконфигурировать ваш брокер, а потом атоматически создаст и сконфигурирует его. Для запуска вашего брокера используйте программу `RunBroker`, которую создаст `CreateBroker`. Брокер должен запускаться при перезапуске вашей системы. Чтобы предотвратить брокер от коллекционирования при запуске, используйте опцию -nocol. Есть много способов, которыми вы можете переделать и настроить брокер, обсуждаемые в разделах Настройка индексирования Glimpse в Broker'е и Использование различных индексирующих/поисковых систем вместе с Broker'ом. Вы также можете использовать команду `RunHarvest`, рассматриваемую в разделе Запуск системы: команда RunHarvest и связанные с ней команды, чтобы создать как брокер, так и Gatherer.

## 5.3 Отправление запросов Broker'у

Брокер Harvest'а может работать с различными типами запросов. Запросы, обрабатываемые отдельным брокером, зависят от того, какая индексируюшая/поисковая система используется внутри его (например, WAIS не поддерживает некоторые из запросов, которые поддерживает Glimpse). В этом разделе мы описываем весь синтаксис. Если данный брокер не поддерживает определенный тип запросов, он вернет ошибку, когда пользователь совершит запрос такого типа.

Простейшие запросы - это отдельные ключевые слова, например:

> `

>             lightbulb

> `

Поиск по общеупотребительным словам (как ``computer'' или ``html'') может занять много времени.

В частности для больших брокеров часто полезно использовать более мощные запросы. Harvest поддерживает много раздичных индексирующих/поисковых движков с разными возможностями. На данный момент, наш самый мощный (и чаще используемый) поисковый движок -- Glimpse, который поддерживает:

- запросы с учетом и без учета регистра;
- поиск по частям слова, целым словам, или фразам из нескольких слов (как ``обнаружение ресурсов'');
- булевские (И/ИЛИ) комбинации ключевых слов;
- приблизительные сопоставления (например, позволяя допускать ошибки в написании);
- структурированные запросы (которые дают вам возможность совершать поиск по определенным атрибутам);
- вывод совпавших строк или целыз записей (например, для цитирования);
- указание пределов на число возвращаемых совпадений;
- ограниченную форму регулярных выражений (например, позволяя задавать выражения, которые подходят ко всем словам, оканчивающимся на данный суффикс).

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

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

Структурированный запрос имеет вид:

> `

>             tag-name : value

> `

Где tag-name -- это имя атрибута резюме содержимого, а value - значание для поиска по этому атрибуту. Если вы кликните на резюме содержимого (Content Summary), вы увидите, какие атрибуты доступны для данного брокера. Список наиболее общих атрибутов показан в разделе Список общих имен атрибутов SOIF .

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

> `

>             "internet resource discovery"

> `

или

> `

>             "discov.*"

> `

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

### Примеры запросов

Запрос для простого поиска по ключевому слову:

  Arizona

  тот запрос вернет все объекты брокера, содержащие слово Arizona.

Булевский запрос:

  Arizona AND desert

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

Запрос с фразой:

  "Arizona desert"

  Этот запрос вернет все объекты брокера, которые содержат Arizona desert как фразу. Заметьте, что вокруг фразы нужно ставить двойные кавычки.

Булевские запросы с фразами:

  "Arizona desert" AND windsurfing

  Этот запрос вернет все объекты брокера, которые содержат Arizona desert как фразу и слово windsurfing.

Простой структурированный запрос:

  Title : windsurfing

  Этот запрос вернет все объекты брокера, в которых атрибут Title содержит значение windsurfing.

Сложный запрос:

  "Arizona desert" AND (Title : windsurfing)

  Этот запрос вернет все объекты брокера, которые содержат фразу Arizona desert и в которых атрибут Title содержит значение windsurfing.

### Регулярные выражения

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

- ^joe соответствует ``joe'' в начале строки.
- joe$ соответствует ``joe'' в конце строки.
- [a-ho-z] соответствует любому символу между ``a'' и ``h'' или между ``o'' и ``z''.
- . соответствует одному произвольному символу кроме символа новой строки.
- c* соответствует произвольному числу символов ``c'' или ни ондного такого символа.
- .* соотвествует произвольному числу любых символов кроме новой строки.
- \* соответствует символу ``*''. (\ позволяет передать любой из вышеуказанных спецсимволов.)

Регулярные выражения на данный момент ограничены по длине до приблизительно 30 символов, не включая метасимволы. Регулярные выражения обычно не будут переступать за границы слов (так как в индексе хранятся только слова). Так, например, ``lin.*ing'' найдет ``linking'' или ``flinching'', но не ``linear programming''.

### Опции запросов, выбираемые в меню или кнопками

Страница запросов может иметь следующие меню (типа checkbox), чтобы позволить контролировать спецификацию запроса.

Без учета регистра:

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

Сопоставление ключевых слов по границам слов:

  При выборе этого меню ключевые слова будут сопоставляться по границам слов. В противном случае ключевое слово будет сопоставляться части слова (или фразы). Например, ``network'' сопоставится с ``networking'', ``sensitive'' сопоставится с ``insensitive'', и ``Arizona desert'' сопоставится с ``Arizona desertness''. По умолчанию -- сопоставление по границам слов.

Число допустимых ошибок:

  Glimpse позволяет запросу содержать некоторое число ошибок. Ошибка -- это или удаление, вставка или замещение одного символа. Опция лучшее сопоставление (Best Match) найдет сопоставление (-ия) с наименьшим числом ошибок. По умолчанию -- 0 (ноль) ошибок.

Примечание: Предыдущие три опции не применяются к именам атрибутов. Имена атрибутов всегда чувствительны к регистру и не допускают ошибок.

### Фильтрование результатов запроса

Harvest позволяет фильтровать результаты запроса по любому из частей запроса, используя атрибуты, определенные в разделе Список общих имен атрибутов SOIF. Это делается определением параметров filter в форме запросов. Можно определить больше, чем один параметр фильтра; они будут конкатенированы булевым И. Параметры фильтра состоят из двух частей, разделенных вертикальной чертой ``|''. Первая часть - это выражение запроса, которое прикрепляется к запросу пользователя, используя AND перед отправлением запроса брокеру. Опциональная вторая часть -- это текст 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. Обратитесь на страницу расширенного поиска брокера за другими примерами.

### Представление результатов

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

Показать совпавшие строки (из резюме содержимого):

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

Показывать описания объектов (если доступно):

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

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

  Это меню позволяет вам выбрать, показывать ли ссылки на проиндексированные резюме объектов. По умолчанию -- не показывать.

## 5.4 Настройка выдаваемого результата на запрос Broker'у

Администратору Harvest'а можно настроить, как будет генерироваться результат запроса брокеру. Это можно сделать, модифицируя конфигурационный файл, который читается программой Perl `search.cgi` во время выполнения запроса.

`search.cgi` позволяет настроить почти любой аспект его HTML-выхода. Файл $HARVEST_HOME/cgi-bin/lib/search.cf содержит определения выхода по умолчанию. Отдельные брокеры могуть быть настроены путем создания похожего файла, который заменит определения по умолчанию.

### Конфигурационный файл search.cf

Определения заключаются в начальные и конечные тэги типа 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>

> `

Когда определения будут печататься, переменные $host и $port будут заменены на имя хоста и порт брокера.

### Определенные переменные

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

> `

>             $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 с именем файла

> `

### Список определений

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

<Timeout>

  Значение времени ожидания для `search.cgi`. Если брокер не отвечает в течение этого времени, `search.cgi` выходит.

<ResultHeader>

  Первая часть страницы результатов. Должно вероятно содержать элемент HTML <TITLE> и строку запроса пользователя.

<ResultTrailer>

  Последняя часть страницы результатов. По умолчанию имеет ссылки URL к домашней странице брокера и домашней странице проекта Harvest.

<ResultSetBegin>

  Это вывод прямо перед циклом по всем подходящим объектам.

<ResultSetEnd>

  Это вывод сразу после завершения цикла по объектам.

<PrintObject>

  Это определение печатает подошедший объект. Оно, возможно, должно включать переменные $url, $cs_url, $desc и $opaque.

<EndBrokerResults>

  Печатается между <ResultSetEnd> и <ResultTrailer>, если запрос был успешным. Вероятно, должно включать число найденных объектов и/или совпавших строк.

<FailBrokerResults>

  Похоже на <EndBrokerResults>, но печатается, если вернул ошибку в ответ на запрос.

<ObjectNumPrintf>

  Формат `printf` строки для объекта под номером ($objectnum).

<TruncateWarning>

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

Следующие определения немного отличаются, так как они определяются как инструкции Perl, а не строки.

<MatchedLineSub>

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

<InitFunction>

  Определяется вначале программы `search.cgi`. Может быть использовано для установки специальных переменных или чтения файлов данных.

<PerObjectFunction>

  Определяется для каждого объекта прямо перед вызовом <PrintObject>.

<FormatAttribute>

  Определяется для каждого атрибута SOIF, запрошенного для подходящего объекта (см. раздел Выдача атрибутов SOIF в результатах $att установлено для имени атрибута, а $val установлено для значения атрибута.

### Пример файла настроек search.cf

Следующие определения демонстрируют, как менять вывод `search.cgi`. <PerObjectFunction>, что определение не пусто. Оно также присоединяется спереди к строке ``matched data:'' перед любой совпавшей строкой. Определение <PrintObject> печатает номер объекта, описание и индексные данные, все в первой строчке. Описание располагается вокруг тэгов привязки HMTL (anchor tags), так что оно становится ссылкой на первоначально созданный объект. Слова ``indexing data'' - ссылка на программу displaySOIF, которая отфрматирует резюме содержимого для броузеров HTML. Номер объекта отформатирован как число в скобках, такое что все вместе занимает до четырех символов.

Определение <MatchedLineSub> включает четыре замещающих выражения. Первое удаляет слова ``Matched line'': в начале каждой совпавшей строчки. Второе удаляет атрибуты SOIF вида ``partial-text{43}:'' вначале каждой строки. Третье показывает имена атрибутов (например, partial-text#) курсивом. Последнее выражение разделяет каждую строку пятью пробелами и располагает ее вместе со строкой описания. Опрделение <EndBrokerResults> слегка модифицирует отчет о том, сколько объектов было найдено.

> `

>             # Пример показывает некоторые особенности настройки вывода 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>

> `

### Интегрирование ваших настроенных конфигурационных файлов

Конфигурационные файлы `search.cgi` хранятся в $HARVEST_HOME/cgi-bin/lib. Имя настроенного файла занесено в список формы query.html и передано как опция программе `search.cgi`.

Самый простой способ определить настроенный файл -поместить тэг <INPUT> в форму HTML:

> `

>             <INPUT TYPE="hidden" NAME="brokerqueryconfig" VALUE="custom.cf">

> `

Другой способ - позволить пользователям выбирать различные настройки при помощи списка <SELECT>:

> `

>             <SELECT NAME="brokerqueryconfig">
>             <OPTION VALUE=""> Default
>             <OPTION VALUE="custom1.cf"> Customized
>             <OPTION VALUE="custom2.cf" SELECTED> Highly Customized
>             </SELECT>

> `

### Выдача атрибутов SOIF в результатах

Можно запросить атрибуты SOIF из формы запросов HTML. Простое приближение - включить список select в форму запросов:

> `

>             <SELECT MULTIPLE NAME="attribute">
>             <OPTION VALUE="title">
>             <OPTION VALUE="author">
>             <OPTION VALUE="date">
>             <OPTION VALUE="subject">
>             </SELECT>

> `

Таким образом пользователь может контролировать, какие атрибуты показывать. Расположение этих атрибутов при выводе результатов в HTML контролируется инструкцией <FormatAttribute> в файле search.cf, оисанном в разделе Конфигурационный файл search.cf.

## 5.5 Описание интерфейса World Wide Web

Чтобы позволить броузерам легко взаимодействовать с брокером, мы реализовали 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 те файлы или вручную скопировать их. Вам также понадобится изменить файл Brokers.cf и указать на хост, где запущен брокер.

### Файлы HTML для графического пользовательского интерфейса

`CreateBroker` создает несколько файлов HTML и предоставляет GUI пользователю:

query.html

  Содержит GUI для интерфейса запросов. `CreateBroker` установит разные файлы query.html для Glimpse, Swish и WAIS, так как каждая подсистема требует различных установок по умолчанию и поддерживает разную функциональность (например, WAIS не поддерживает приблизительный поиск, в отличие от Glimpse). Это также ``домашняя страница'' для брокера и ссылка на нее включена внизу во всех страницах результатов запросов.

admin.html

  Содержит GUI для административного интерфейса. Это файл устанавливается в каталог admin брокера.

Brokers.cf

  Содержит информацию об именах хостов и портах поддерживаемых брокеров. Этот файл устанавливается в каталог $HARVEST_HOME/brokers. Файл query.html использует значение тэга FORM ``broker'', чтобы передать имя брокера `search.cgi`, который в свою очередь получает имя хоста и порт из Brokers.cf.

### Программы CGI

Когда вы устанавливаете WWW интерфейс (см. раздел The Broker), несколько программ устанавливаются в каталог /Harvest/cgi-bin вашего сервера HTTP:

`search.cgi`

  Эта программа берет отправленный запрос из query.html и посылает его указанному брокеру. Затем она получает результаты запроса от брокера, форматирует его в HTML и отправляет пользователю.

`displaySOIF.cgi`

  Эта программа показывает резюме содержимого объектов брокера.

`BrokerAdmin.pl.cgi`

  Эта программа принимает административную команду из admin.html и отправляет ее соответствующему брокеру. Она получает результат от брокера и выдает его пользователю.

### Файлы помощи пользователю

WWW интерфейс брокера включает несколько файлов помощи, написанных на HTML. Эти файлы устанавливаются на ваш сервер HTTP в каталог /Harvest/brokers, когда вы устанавливаете брокер (см. раздел Broker):

queryhelp.html

  Предоставляет учебное пособие по построению запросов брокеру и использованию форм query.html. query.html имеет ссылку на эту страницу.

adminhelp.html

  Предоставляет учебное пособие по отправдению брокеру административных команд, используя форму admin.html. admin.html имеет ссылку на эту страницу.

soifhelp.html

  Предоставляет краткое описание SOIF.

## 5.6 Администрирование Broker'а

У администраторов есть два основных способа управления брокером: через конфигурационные файлы broker.conf и Collection.conf, и через интерактивный административный интерфейс. Интерактивный интерфейс контролирует разные средства и действующие параметры в брокере. Мы предоставляем HTML интерфейс для этих административных команд. Обратитесь в раздел Описание интерфейса коллектора: Collection.conf за дополнительной информацией о интерфейсе коллектора и административном интерфейсе брокера.

Файл broker.conf - это список имен переменных и их значений, который состоит из информации о брокере (такой как каталог, где он находится) и порт, на котором он запущен. Файл Collection.conf (обратитесь в раздел Описание интерфейса коллектора: Collection.conf за примером) - это список точек коллекционирования, откуда брокер будет собирать свою индексную информацию. Программа `CreateBroker` автоматически генерирует оба эти конфигурационные файла. Вы можете вручную отредактировать их в случае необходимости.

Программа `CreateBroker` также создает файл admin.html, который является административным интерфейсом для команд брокеру. Заметьте, что все административные команды требуют пароль, определенный в broker.conf.

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

Административный интерфейс, созданный `CreateBroker`, имеет следующие поля:

> `

>     Command         Выбрать административную команду.  Ниже приведено описание
>                     команд.
>     Parameters      Указать параметры для тех команд, для которых это необходимо.
>     Password        Административный пароль.
>     Broker Host     Хост, на котором запущен брокер.
>     Broker Port     Порт, который прослушивает брокер.

> `

Административный интерфейс, созданный `CreateBroker`, поддерживает следующие команды:

Add objects by file:

  Добавить объект(ы) брокеру. Параметр -- список файлов, содержащих объекты SOIF, которые нужно добавить.

Close log:

  Записать всю накопленную лог-информацию и закрыть текущий лог-файл. Заставляет брокер прекратить вести логи. Параметров нет.

Compress Registry:

  Предоставляет сбор мусора в файле реестра. Параметров нет.

Delete expired objects:

  Удалить все объекты из брокера, у которых истекло время жизни Time-to-Live. Параметров нет.

Delete objects by query:

  Удаляет все объекты, которые удовлетворяют данному запросу. Параметр -- запрос с таким же синтаксисом, как и пользовательский запрос. Флаги запросов на данный момент не поддерживаются.

Delete objects by oid:

  Удалить объекты(ы), указанные данными числами OID. Параметр -- список чисел OID. Числа OID могут быть получены, используя команду `dumpregistry`.

Disable log type:

  Отменяет ведение лог-информации о данном типе событий. Параметр -- тип события. Чтобы посмотреть список событий, см. ``Включить логи по типу''.

Enable log type:

  Включает ведение лог-информации о данном типе событий. Параметр -- имя типа события. Сейчас типы событий ограничены следующим набором:

  > `

  >     Update                  Вести логи по обновленным объектам.
  >     Delete                  Вести логи по удаленным объектам.
  >     Refresh                 Вести логи по восстановленным объектам.
  >     Query                   Вести логи по запросам пользователей.
  >     Query-Return            Вести логи по объектам, возвращенным на запрос.
  >     Cleaned                 Вести логи по объектам, удаленным уборщиком (cleaner).
  >     Collection              Вести логи о коллекционировании.
  >     Admin                   Вести логи об административных событиях.
  >     Admin-Return            Вести логи о результатах административных событий.
  >     Bulk-Transfer           Вести логи о событиях с с болшой передачей данных.
  >     Bulk-Return             Вести логи об объектах, отправленных при большой передаче.
  >     Cleaner-On              Вести логи о событиях очистки.
  >     Compressing-Registry    Вести логи о сжатии реестра.
  >     All                     Вести логи о всех событиях.

  > `

Flush log:

  Записать всю накопленную лог-информацию в текущий лог-файл. Параметров нет.

Generate statistics:

  Генерирует основную статистику об объектах брокера в базе данных. Параметров нет.

Index changes:

  Индексировать только объекты, которые были добавлены недавно. Параметров нет.

Index corpus:

  Индексировать всю базу данных объектов. Параметров нет.

Open log:

  Открывает новый лог-файл. Если файл не существует, создает новый. Параметр - имя (относительно брокера) файла для логов.

Restart server:

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

Rotate log file:

  Заменяет текущий лог-файл на LOG.YYYYMMDD. Открывает новый лог-файл. Параметров нет.

Set variable:

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

Shutdown server:

  Очевидно останавливает сервер. Параметров нет.

Start collection:

  Начинает сбор. Параметров нет.

Delete older objects of duplicate URLs:

  Иногда брокер может прекратить работать с продублированными резюме для некоторых URL. Это может случиться, когда Gatherer меняет свое описание, имя хоста или номер порта. Используйте эту команду, чтобы брокер нашел повторяющиеся URL'ы. Когда находятся два объекта с одинаковыми URL'ами, объект с наибольшей временной меткой удаляется.

### Удаление нежелательных объектов брокера

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

1. Использовать команду 'удалить объекты по имени'. Это разумно только, если у вас небольшое число объектов, которые надо удалить.
2. Использовать 'удалить объекты по запросу'. Это может оказаться лучшей опцией, если, например, вы можете построить регулярное выражение для тех URL'ов, которые вы хотите удалить.
3. Остановить сервер, вручную удалить файлы брокера objects/*, а потом перезапустить брокер. Это самы простой способ, хотя если у вас большое число объектов, то для перестроения индекса потребуется много времени. Простой способ выполнить это -- перезапустить брокер, удалить все текущие объекты и сделать полную коллекцию:

   > `

   >             % mv objects objects.old
   >             % rm -rf objects.old &
   >             % broker ./admin/broker.conf -new

   > `

После удаления объектов, вам следует использовать команду индексировать все.

### Администрирование из командной строки

Можно предоставить административные функции, используя программу `brkclient` из командной строки и скриптов оболочки. Например, чтобы выполнить собирание (collection), запустите:

> `

>             % brkclient localhost 8501 '#ADMIN #Password secret #collection'

> `

Посмотрите файл admin.html вашего брокера, если хотите увидеть полный список административных команд.

## 5.7 Настройка индексирования Glimpse в Broker'е

Система индексирования Glimpse может быть настроена различными способами, чтобы удовлетворить вашим конкретным нуждам. Наверное, больше всего внимания заслуживает параметр ``степень детализации индексирования'' (indexing granularity), для которго Glimpse предоставляет три опции: крохотный индекс (2-3% всего размера всех файлов), маленький индекс (7-8%) и средний индекс (20-30%). Времена поиска лучше с большими индексами. Изменяя опцию GlimpseIndex-Option в файле broker.conf вашего брокера, вы можете настроить Glimpse для использования одной из трех опций детализации индекса. По умолчанию, GlimpseIndex-Option строит средний индекс, используя программу `glimpseindex`.

Заметьте также, что при помощи Glimpse поиск осуществляется быстрее, если выключить ``показывать совпавшие строки'' на странице запросов брокеру.

Glimpse использует ``stop-list'', чтобы избежать индексирование очень распространенных слов. Этот список не фиксирован, он получается при построении индекса. По умолчанию для среднего индекса каждое слово, которое встречается по крайней мере 500 раз в 1 Mb (в среднем), помещается в stop-list. Для маленького индекса по умолчанию в stop-list помещаются слова, которые появляются в 80% всех файлов (если файло не меньше 256, иначе stop-list не создается). Установки по умолчанию можно изменить, используя опцию -S, за которой должно стоять новое чисол (среднее в 1 Mb при использовании индексирования -b, или % от файлов при использовании индексирования -o). Крошечные индексы не содержат stop-list'ов (их влияние минимально).

`glimpseindex` включает несколько других опций, которые могут быть интересными. Вы можете больше узнать об этих опциях (и о Glimpse в общем) в документации Glimpse. Если вы захотите изменить то, как брокер вызывает программу `glimpseindex`, то отредактируйте файл src/broker/Glimpse/index.c в исходниках дистрибутива Harvest'а.

### Программа glimpseserver

Система Glimpse поставляется со вспомогательным сервером, называемым `glimpseserver`, который позволяет считывать индексы в процесс и хранить в памяти. Это помогает избежать добавочной стоимости чтения индекса и запуска больших процессов для каждого поиска. `glimpseserver` автоматически запускается каждый раз, когда вы запускаете брокер, или заново все индексируете. Если вы не хотите запускать `glimpseserver`, тогда установите GlimpseServer-Host в ``false'' в вашем broker.conf.

## 5.8 Использование различных индексирующих/поисковых систем вместе с Broker'ом

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

На данный момент мы распространяем код с поддержкой интерфейса как свободного, так и коммерческого движков WAIS, Glimpse и Swish.

Ниже мы обсуждаем, как использовать другие движки индекса/поиска вместо Glimpse в брокере, и коротко обсуждаем, как объединить новый движок индекса/поиска с брокером.

### Использование Swish в качестве индексера

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

Чтобы использовать Swish с существующим брокером, вам нужно изменить переменную Indexer-Type в broker.conf на ``Swish''.

Вы также можете указать, что вы хотите использовать Swish для брокера, когда используете команду `RunHarvest`, запустив: `RunHarvest -swish`.

### Использование WAIS в качестве индексера

Поддержка использования WAIS (как freeWAIS, так и WAIS Inc.) как подсистем брокера индексирования и поиска включена в дистрибутив Harvest. WAIS -- это хорошая альтернатива Glimpse, если вас нужна поддержка более быстрого поиска, и вы не желаете использовать более мощные свойства запросов.

Чтобы использовать WAIS с существующим брокером, вам нужно изменить переменную Indexer-Type в broker.conf на ``WAIS''; вы можете выбрать вариант WAIS, установив переменную WAIS-Flavor в broker.conf на ``Commercial-WAIS'', ``freeWAIS'' или ``WAIS''. Иначе `CreateBroker` спросит вас, хотите ли вы использовать WAIS и где находятся программы WAIS (`waisindex`, `waissearch`, `waisserver` и, в коммерческой версии WAIS, `waisparse`). Когда вы запустите брокер, после построения индекса автоматически запустится сервер WAIS.

Вы также можете указать, что хотите использовать WAIS для брокера, когда используете команду `RunHarvest`, запустив: `RunHarvest -wais`.

## 5.9 Описание интерфейса коллектора: Collection.conf

Брокер получает индексную информацию от Gatherer'ов или других брокеров через свой интерфейс Collector. Список точек коллекционирования указан в конфигурационном файле admin/Collection.conf. Этот файл содержит точки коллекционирования в каждой строке из 4 полей. Первое поле -- хост удаленного Gatherer'а или брокера, второе поле -- номер порта на этом хосте, третье поле -- тип кооекции, а четвертое поле -- фильтр запросов или --, если фильтра нет.

Брокер поддерживает различные типы коллекций, которые приведены ниже:

> `

>       Тип   Удаленный процесс     Описание                      Сжатие?
>       ---------------------------------------------------------------------
>         0     Gatherer    Полное коллекционирование всякий раз  Нет
>         1     Gatherer    Инкрементальное коллекционирование    Нет
>         2     Gatherer    Полное коллекционирование всякий раз  Да
>         3     Gatherer    Инкрементальное коллекционирование    Да
>         4     Broker      Полное коллекционирование всякий раз  Нет
>         5     Broker      Инкрементальное коллекционирование    Нет
>         6     Broker      Коллекционированное на основе запроса Нет
>         7     Broker      Инкрементальное на основе запроса     Нет

> `

Спецификация фильтра запроса для типов коллекций 6 и 7 содержит две части: --QUERY keywords и опционально --FLAGS flags. Часть --QUERY передается брокеру как ключевые слова для хапроса (ключевые слова могут быть любым булевским и/или структурированным запросом); часть --FLAGS передается брокеру как флаги запросу, в зависимости от индексера. Следующая таблица показывает действующие флаги для поддерживаемых индексеров:

> `

>     Индексер        Флаг                            Описание
>     -----------------------------------------------------------------------------
>     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                         показать оценки и ранжирования

> `

Ниже приведен пример Collection.conf, который собирает информацию с 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

> `

## 5.10 Устранение неполадок

Симптом

  Брокер запущен, но всегда возвращает empty query results (пустой результат на запрос).

Решение

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

Симптом

  Когда я отправляю запрос брокеру, я получаю "500 Server Error" (ошибка сервера 500).

Решение

  В основном, ошибки ``500'' относятся к неверно работающим программам CGI или неверно сконфигурированному серверу httpd. Убедитесь, что userid пользователя, запустившего сервер HTTP имеет доступ к каталогу Harvest'а cgi-bin и файлам Perl в $HARVEST_HOME/lib. Обратитесь в раздел Дополнительная установка для Harvest Broker за деталями.

Симптом

  Я вижу продублированные документы в моем брокере.

Решение

  Брокер предоставляет устранение дубликатов на основе комбинации контрольных сумм MD5 и хоста, имени, версии Gatherer'а. Таким образм, вы можете убрать продублированные документы, если ваш брокер собирает с более чем одного Gatherer'а, каждый из которых собирает с одного набора URL. (Как отступление, причина этого замечания о устранении дубликатов связана с тем, что отдельный брокер может содержать несколько различных объектов SOIF для одного URL, но просуммированных различными способами.)

  Есть два решения проблемы:

  1. Запустите ваши Gatherer'ы на одном хосте.
  2. Удалите продублированные URL'ы в настроенной версии программы `search.cgi`, проделав построчное сравнение URL.

Симптом

  Брокер долго работает и не отвечает на запросы.

Решение

  Некоторые запросы очень тяжелые, так как вовлекают много работы с вводом/выводом. По этой причине мы модифицировали Broker, так что если запрос занимает больше чем 5 минут, процесс запроса убивается. Лучшее решение -- использовать менее тяжелые запросы, например, используя меньше распространенных ключевых слов.

Симптом

  Некоторые из опций запросов (такие как структурированные запросы или запросы с учетом регистра) не работают.

Решение

  Обычно это означает, что вы используете движок индекса/поиска, который не поддерживает структурированных запросов. Если вы устанавливаете свой брокер (а не используете чей-то еще), обратитесь в раздел Использование различных индексирующих/поисковых систем вместе с Broker'ом за деталями о том, как переключиться на другие движки. Или может быть ваша программа `search.cgi` старой версии и должна быть обновлена.

Симптом

  Я получаю syntax errors (ошибки синтаксиса), когда посылаю запрос.

Решение

  Обычно это значит, что вы не испотзовали двойные кавычки, где необходимо. См. раздел Отправление запросов Broker'у.

Симптом

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

Решение

  Вероятно, это указывает, что ваш `httpd` плохо сконфигурирован. Обычно не ставят 'ScriptAlias' перед 'Alias' в файле conf/httpd.conf, когда запускают Apache `httpd`. См. раздел Дополнительная установка для Harvest Broker.

Симптом

  Когда я делаю изменения в конфигурационном файле брокера при помощи административного интерфейса, они теряются после перезапуска брокера. is restarted.

Решение

  Административный интерфейс брокера не сохраняет изменений при перезапуске. Постоянные изменения в конфигурации брокера следует делать в файле broker.conf.

Симптом

  Мой брокер работает очень медленно.

Решение

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

  Простой способ проверить -- запустить ``vmstat 5'' в одном окне, и после пары строк вывода, выполнить запрос из другого окна. Так напечатается строка с измерениями статуса виртуальной памяти вашей машины каждые 5 секунд. В частности, посмотрите на колонки ``pi'' и ``po''. Если числа вдруг прыгнут в диапазон 500-1000 после выполнения запроса, значит вы много записываете страниц памяти.

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

  Лучше всего запускать брокер на почти не используемой машине с памятью, по меньшей мере, 128 MB (лучше больше, если вышеуказанный эксперимент с ``vmstat'' показывает, что вы записывает много страниц).

  Другой способ улучшить производительность - запустить httpd-accelerator на машине с вашим брокером, чтобы перехватывать запросы брокеру. Пока он заносит в кэш результат запросов, он снизит загрузку машины, так как он снабжен очень эффективными средствами возвращения запросов в случае пааллельных запросов. Без акселератора результаты возвращаются процессами `search.cgi` на каждый запрос, а ядро UNIX неэффективно делит время для этих процессов. С акселератором процессы `search.cgi` быстро умирают и дают акселератору вернуть результаты разным пользователям одновременно. Акселератор также снизит нагрузку для получения данных (не запросов) с вашего сервера httpd.

След Пред Содержание