8.7. Программа attributer

8.7.1. Документные атрибуты: создание и использование

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

Значения атрибутов могут сопоставляться с документом при его индексировании. В этом случае они извлекаются из текста документа в соответствии с конфигурацией парсера документного формата (см., например, Конфигурация HTML-парсера) и конфигурацией индексатора (см. директивы DocFormat, DocProperty, Groups, а также Набор атрибутов документа. В данном разделе описан альтернативный способ создания документных атрибутов с помощью специальной постиндексирующей процедуры, реализованной в программе attributer.

Замечание: Текущая версия программы attributer, описанная в данной главе, несовместима с созданием атрибутов во время индексирования!

Алгоритм добавления атрибутов.

  • Пользователь пишет callback-функцию на языке C или C++ и указывает ее в конфигурационном файле программы attributer. Пример реализации callback-функции aghost входит в комплект поставки.

  • В начале своей работы программа attributer открывает индексные файлы, созданные индексатором, и определяет список URL-в документов, входящих в индекс.

  • Для каждого URL из этого списка программа attributer один или несколько раз вызывает пользовательскую callback-функцию, чтобы получить значения всех атрибутов данного документа, которые надо добавить в индекс.

  • В конце своей работы программа attributer создает новые индексные файлы, в которых учтены предоставленные атрибуты.

8.7.2. Конфигурационный файл программы attributer

Конфигурационный файл программы attributer состоит из директив WorkDir, Log, IndexDir, TempDir и одной или нескольких секций AttrProvider.

WorkDir

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

Значение по умолчанию: директория, из которой запущен attributer

Log

Путь к файлу протокола, абсолютный или относительно WorkDir.

Значение по умолчанию: стандартный поток вывода

IndexDir

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

Значение по умолчанию: ./workindex

Пример:

  IndexDir myindex

TempDir

Директория, в которой будут храниться промежуточные данные и вновь создаваемые индексные файлы. Должен быть указан абсолютный путь или путь относительно WorkDir. Если директория отсутствует, будет сделана попытка ее создать. Аргументы директив TempDir и IndexDir должны быть различны.

Значение по умолчанию: ./newindex

Пример:

  TempDir /var/tmp/yandex

Директивы секции AttrProvider

Module

Задает путь к модулю, в котором находится набор пользовательских callback-функций.

Symbol

Задает имя символа, который должен быть загружен из библиотеки, указанной в директиве Module. Данный символ должен представлять структуру функций ATTRGEN_LIB.

Config

Строка конфигурации, передаваемая пользовательской callback-функции. Может иметь смысл командной строки или имени конфигурационного файла. Интерпретация этой строки остается за callback-функцией.

Значение по умолчанию: не задан

Groups

Список имен для группировочных атрибутов. В каждом аргументе директивы сразу после имени атрибута через двоеточие может быть указано одно из чисел 1,2,3,4, имеющее смысл максимального числа байт, которое может занимать значение данного атрибута. Указание меньшего числа уменьшает размер базы группировочных атрибутов. Значение по умолчанию - 4.

DocProperty

Список имен для свойств документа. Игнорируется в текущей версии.

SearchAttr

Список имен для поисковых атрибутов. Игнорируется в текущей версии.

8.7.3. Динамическая библиотека пользователя

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

  typedef
  struct ATTRGEN_LIB {
      FUNC_Attrgen_OpenSession    OpenSession;
      FUNC_Attrgen_CloseSession   CloseSession;
      FUNC_Attrgen_GetGroupAttr   GetGroupAttr;
      FUNC_Attrgen_GetIndexAttr   GetIndexAttr;
      FUNC_Attrgen_GetArchiveAttr GetArchiveAttr;
  } ATTRGEN_LIB;
Структура описана в заголовочном файле aglib.h. Пример реализации функций для группировки по хостам приведен в файле aghost.cpp.

Функции структуры ATTRGEN_LIB

int (*FUNC_Attrgen_OpenSession)(GA_SESSION *obj, const char* cmdline)

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

  typedef void* GA_SESSION;
Если таких данных нет, первый аргумент можно игнорировать. Во втором аргументе передается значение директивы Config. Функция должна возвращать AGOK в случае успеха. Если будет возвращено другое значение, текущая секция AttrProvider не будет использована.

int (*FUNC_Attrgen_CloseSession)(GA_SESSION obj)

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

int (*FUNC_Attrgen_GetGroupAttr)(GA_SESSION obj, const char* url, const char* attrname, ui32* attrvalue)

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

Функция должна возвратить одно из следующих значений.

AGCONTINUE - в последнем аргументе передано числовое значение атрибута и для данного документа и данного имени атрибута существуют еще значения.
AGOK - в последнем аргументе передано числовое значение атрибута и других значений больше нет
AGFALSE - данный документ не имеет атрибутов с данным именем.
AGERROR - случилась ошибка.

int (*FUNC_Attrgen_GetIndexAttr)(GA_SESSION obj, const char* url, const char* attrname, char** attrvalue)

Никогда не вызывается в текущей версии программы attributer.

int (*FUNC_Attrgen_GetArchiveAttr)(GA_SESSION obj, const char* url, const char* attrname, char** attrvalue)

Никогда не вызывается в текущей версии программы attributer.

Техническое замечание. С точки зрения эффективности реализации желательно, чтобы диапазон значений группировочных атрибутов был как можно более "компактен" и его нижняя граница была недалека от нулевого значения. Максимальное число группировочных атрибутов равно 20. Максимальное число уровней в иерархии данного атрибута равно 10. Максимальное число значений данного атрибута, которое может иметь документ, равно 20 (без учета верхних уровней возможной иерархии).

Copyright © 1997 – 2005 «Яндекс»