| Яndex.Server 3.4: Руководство пользователя | ||
|---|---|---|
| Пред. | Глава 8. Документация для разработчиков | |
Документные атрибуты подробно описываются в разделах Форматы документов, зоны и атрибуты и Группировочные атрибуты. По способам хранения и использования документные атрибуты можно разделить на три группы.
Поисковые атрибуты. Используются для поиска документов. Имена атрибутов используются в языке запросов. Хранятся в файлах indexinv/indexkey.
Группировочные атрибуты. Используются для сортировки и группировки найденных документов. Имена атрибутов используются в полях поисковой формы запроса. Хранятся в файлах indexatr/indexaof.
Свойства документа. Используются для отображения на странице с результатами поиска. Имена атрибутов используются в аргументе функции DocProperty. Хранятся в файлах indexarc/indexdir.
Замечание: Текущая версия программы attributer, описанная в данной главе, несовместима с созданием атрибутов во время индексирования!
Алгоритм добавления атрибутов.
Пользователь пишет callback-функцию на языке C или C++ и указывает ее в конфигурационном файле программы attributer. Пример реализации callback-функции aghost входит в комплект поставки.
В начале своей работы программа attributer открывает индексные файлы, созданные индексатором, и определяет список URL-в документов, входящих в индекс.
Для каждого URL из этого списка программа attributer один или несколько раз вызывает пользовательскую callback-функцию, чтобы получить значения всех атрибутов данного документа, которые надо добавить в индекс.
В конце своей работы программа attributer создает новые индексные файлы, в которых учтены предоставленные атрибуты.
Конфигурационный файл программы attributer состоит из директив WorkDir, Log, IndexDir, TempDir и одной или нескольких секций AttrProvider.
Рабочая директория. Должен быть указан абсолютный путь или путь относительно директории, из которой запущен attributer. Если в других директивах конфигурационного файла заданы относительные пути, они будут приведены к абсолютным относительно этой директории.
Значение по умолчанию: директория, из которой запущен attributer
Путь к файлу протокола, абсолютный или относительно WorkDir.
Значение по умолчанию: стандартный поток вывода
Директория, в которой находятся индексные файлы, созданные индексатором. Должен быть указан абсолютный путь или путь относительно WorkDir.
Значение по умолчанию: ./workindex
Пример:
IndexDir myindex
Директория, в которой будут храниться промежуточные данные и вновь создаваемые индексные файлы. Должен быть указан абсолютный путь или путь относительно WorkDir. Если директория отсутствует, будет сделана попытка ее создать. Аргументы директив TempDir и IndexDir должны быть различны.
Значение по умолчанию: ./newindex
Пример:
TempDir /var/tmp/yandex
Директивы секции AttrProvider
Задает путь к модулю, в котором находится набор пользовательских callback-функций.
Задает имя символа, который должен быть загружен из библиотеки, указанной в директиве Module. Данный символ должен представлять структуру функций ATTRGEN_LIB.
Строка конфигурации, передаваемая пользовательской callback-функции. Может иметь смысл командной строки или имени конфигурационного файла. Интерпретация этой строки остается за callback-функцией.
Значение по умолчанию: не задан
Список имен для группировочных атрибутов. В каждом аргументе директивы сразу после имени атрибута через двоеточие может быть указано одно из чисел 1,2,3,4, имеющее смысл максимального числа байт, которое может занимать значение данного атрибута. Указание меньшего числа уменьшает размер базы группировочных атрибутов. Значение по умолчанию - 4.
Список имен для свойств документа. Игнорируется в текущей версии.
Список имен для поисковых атрибутов. Игнорируется в текущей версии.
Динамическая библиотека пользователя, путь к которой задается в директиве 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
Вызывается программой attributer один раз на каждую секцию AttrProvider в самом начале работы для того, чтобы дать возможность инициализировать данные, которые нужно передавать между вызовами функций, получающих атрибуты. В первом аргументе передается указатель, который следует установить на указанные данные:
typedef void* GA_SESSION;Если таких данных нет, первый аргумент можно игнорировать. Во втором аргументе передается значение директивы Config. Функция должна возвращать AGOK в случае успеха. Если будет возвращено другое значение, текущая секция AttrProvider не будет использована.
Вызывается программой attributer один раз на каждую секцию AttrProvider в самом конце работы для того, чтобы дать возможность освободить ресурсы, занятые объектом GA_SESSION.
Вызывается один или несколько раз для каждого документа, имеющегося в существующем индексе, (второй аргумент - адрес документа) и для каждого атрибута из директивы Groups (третий аргумент - имя атрибута). Должна передать в последнем аргументе числовое значение атрибута.
Функция должна возвратить одно из следующих значений.
| AGCONTINUE - в последнем аргументе передано числовое значение атрибута и для данного документа и данного имени атрибута существуют еще значения. |
| AGOK - в последнем аргументе передано числовое значение атрибута и других значений больше нет |
| AGFALSE - данный документ не имеет атрибутов с данным именем. |
| AGERROR - случилась ошибка. |
Никогда не вызывается в текущей версии программы attributer.
Никогда не вызывается в текущей версии программы attributer.
Техническое замечание. С точки зрения эффективности реализации желательно, чтобы диапазон значений группировочных атрибутов был как можно более "компактен" и его нижняя граница была недалека от нулевого значения. Максимальное число группировочных атрибутов равно 20. Максимальное число уровней в иерархии данного атрибута равно 10. Максимальное число значений данного атрибута, которое может иметь документ, равно 20 (без учета верхних уровней возможной иерархии).
| Пред. | Начало | |
| Программа hidedocs | Уровень выше |