Конфигурация индексатора, описанная ниже, инициализируется индексатором в начале своей работы на основании конфигурационного файла индексатора, описанного в разделе Директивы конфигурационного файла индексатора и передается в парсеры и источники данных (см. DATASRC_LIB::OpenIndexingSession).
Структуры, используемые индексатором, описаны в файле yandind.h.
Источник данных
Каждый источник данных в индексаторе описывается следующей структурой, которая соответствует одной секции DataSrc в конфигурационном файле индексатора.
typedef
struct DATASRC {
const char *DsId;
const char *Module;
const char *Symbol;
const char *Config;
} DATASRC;
| Член класса |
Описание |
|
*DsId
|
Идентификатор источника данных, соответствует директиве Name конфигурационного файла. |
|
*Module
|
Путь к разделяемой библиотеке, экспортирующей символ DATASRC_LIB, или NULL в случае, если источник данных является частью выполняемого модуля.
Соответствует директиве Module конфигурационного файла.
|
|
*Symbol
|
Имя символа типа DATASRC_LIB, который надо загрузить из разделяемой библиотеки, или адрес структуры DATASRC_LIB в выполняемом модуле.
Соответствует директиве Symbol конфигурационного файла.
|
|
*Config
|
Строка, передаваемая функциям OpenIndexingSession и OpenSearchSession во втором аргументе.
Соответствует директиве Config конфигурационного файла.
|
Конфигурация индексатора
Опции индексирования, общие для всех документов, задаются в поле IndexingFlag структуры INDEX_CONFIG, соответствующим директиве GlobalOptions конфигурационного файла индексатора.
Во флажке могут быть установлены следующие биты.
typedef
enum INDEXING_FLAG {
INDFL_DEFAULT = 0, /* StoreArchive IgnoreWordFreqs DiscardStopWords StoreIndexingDate Update */
INDFL_DISCARDARCHIVE = 1, /* см. DiscardArchive */
INDFL_ANALYSEWORDFREQS = 4, /* см. AnalyseWordFreqs */
INDFL_STORESTOPWORDS = 8, /* см. StoreStopWords */
INDFL_DISCARDINDEXINGDATE = 16, /* см. DiscardIndexingDate */
INDFL_REINDEX = 32, /* см. Reindex */
INDFL_ANALYSESEGMENTS = 128, /* не предназначено для использования, не документировано */
INDFL_ONCEONLYINTID = 256, /* не предназначено для использования, не документировано */
} INDEXING_FLAG;
Индексатор, парсеры и источники данных вносят информацию о своей работе в лог с помощью функции, заданной в поле YxLogNotify структуры INDEX_CONFIG, и определенной как
typedef void (*YX_LOGNOTIFY)(YX_LOGOBJ Obj, LOG_LEVEL level, const char* format, ...);
Уровень подробности сообщений задается перечислением LOG_LEVEL, определенным в файле yandind.h, и соответствующим директиве Level секции IndexLog конфигурационного файла.
Объект лога, передаваемый в первый параметр функции, задается в поле LogObj структуры INDEX_CONFIG. В данной версии этот объект создается индексатором на основании аргумента директивы FileName секции IndexLog конфигурационного файла.
Конфигурация индексатора определяется в следующей структуре.
typedef
struct INDEX_CONFIG {
ui32 PortionDocCount; /* см. директиву StoreStopWords */
ui32 PortionMaxMemory; /* max memory used by temporary indexer portion, about 30 kb per doc by default */
ui32 IndexingFlag; /* см. описание выше*/
const char *StopWordFile; /* see the description of Yandex.Server config directive 'StopWordFile' */
const char *DocProperties; /* см. директиву DocProperty */
const char *Groups; /* см. директиву Groups */
const char *newindexdir; /* часть после последнего слеша является префиксом файла, а не каталогом */
const char *oldindexdir; /* если присутствует, дескрипторы новых документов берутся из свободных */
const char *tempdir; /* по умолчанию, каталог из newindexdir */
YX_LOGNOTIFY YxLogNotify; /* см. описание выше*/
YX_LOGOBJ LogObj;
DOCFORMAT *formats; /* полный список поддерживаемых форматов см. в разделе Парсеры (анализаторы содержимого документа)*/
size_t formatSize;
} INDEX_CONFIG;
off-page информация о документе
Каждый документ может иметь документные атрибуты, как описано в разделе Документы, зоны и атрибуты. Значения атрибутов могут извлекаться из текста документа в соответствии с конфигурацией парсера документного формата (см., например, Конфигурация HTML-парсера), или задаваться источником данных в функции OpenDoc независимо от текста документа. Во втором случае каждому атрибуту соответствует следующая структура.
typedef
struct EXTATTR {
const char *Name;
const char *Value;
ui32 Type;
} EXTATTR;
| Член класса |
Описание |
|
*Name
|
Название атрибута, используется в языке запросов, параметрах поисковой формы how, g и fa или в аргументе функции DocProperty. |
|
*Value
|
Значение атрибута, может иметь разный смысл в зависимости от значения параметра Type. |
|
Type
|
Маска, задающая тип атрибута. Может быть комбинацией описанных ниже битовых полей, определяющих тип и подтип атрибута. |
Атрибут может иметь один или несколько из перечисленных ниже основных типов.
| Тип |
Описание |
|
EXTATTR_SEARCH
|
Поисковый атрибут для ограничения результатов поиска с помощью языка запросов.
Может быть одного из подтипов ATTR_TEXT, ATTR_LITERAL, ATTR_URL или ATTR_DATE в соответствии с описанием в разделе Типы поисковых атрибутов.
|
|
EXTATTR_GROUP
|
Группировочный атрибут для использования при сортировке и группировке найденных документов.
В зависимости от способа задания значения имеются следующие подтипы: GRATTR_CATEG_NAME, GRATTR_CATEG_INT, GRATTR_CATEG_INTBIN.
|
|
EXTATTR_PROPERTY
|
Архивное свойство документа, которое можно извлечь на странице результатов поиска с помощью функции DocProperty.
Не имеет подтипов.
|
|
EXTATTR_AUX
|
Вспомогательное свойство документа для тонкой настройки индексатора.
В настоящее время имеется только один подтип AUXATTR_PARSER_PROPERTY. Атрибуты такого типа устанавливаются как свойства парсера до начала чтения документа.
|
Атрибуты документа можно запаковать в маску Type и распаковать обратно с помощью следующих функций:
- ui32 YxEaPack(ui32 at, GRATTR_TYPE gt = GRATTR_CATEG_NAME, ATTR_TYPE st = ATTR_TEXT).
- ATTR_TYPE YxEaAttrType(ui32 type).
- GRATTR_TYPE YxEaGrattrType(ui32 type).
- ui32 YxEaExtType(ui32 type).
Подтипы группировочного атрибута определяют формат его значения в структуре EXTATTR следующим образом (перечислены в порядке снижения требований к вычислительным ресурсам).
| Подтип |
Описание |
|
GRATTR_CATEG_NAME
|
Значение "EXTATTR::Value" указывает на литеральную строку, в которой записана строка-идентификатор числового значения атрибута. В этом случае при построении базы группировочных атрибутов будет автоматически создан файл имя_атрибута.c2n.
 В данной версии при использовании этого значения не поддерживается переиндексирование.
|
|
GRATTR_CATEG_INT
|
Значение "EXTATTR::Value" указывает на литеральную строку, в которой записано числовое значение атрибута. |
|
GRATTR_CATEG_INTBIN
|
Значение "EXTATTR::Value" указывает на область памяти размером 4 байта, в которой находится целое число, значение атрибута. |
В настоящее время индексатор использует следующие свойства парсера, которые могут быть установлены с помощью атрибута типа EXTATTR_AUX.
| Свойство |
Описание |
|
PP_BASE
|
Базовый адрес для относительных HTTP-ссылок. |
|
PP_CHARSET
|
Эквивалентно заданию DOCINPUT::Charset. |
|
PP_DEFCHARSET
|
Значение кодировки документа, которая будет использована, если распознать кодировку не удалось. |
|
PP_ATTRCHARSET
|
Кодировка текстовых значений атрибутов документа, указанных в DOCINPUT::ExtAttrs.
Если свойство не установлено, будет использована указанная или распознанная кодировка документа.
|
|
PP_LOCALFILE
|
Документ доступен как локальный файл с указанным именем.
Оптимизация для форматов, требующих для своего анализа произвольного доступа.
|
|
PP_IGNORE_PUNCT_BREAKS
|
Игнорирование разбиения на предложения и параграфы от внутреннего лексического анализатора.
Будет учитываться только внутренняя разметка документа.
|
|
PP_IGNORE_PASSAGES
|
Текст данного документа не будет архивироваться. |
Свойства документа
typedef void *YX_DOCOBJ;
typedef
struct DOCINPUT {
/* obligatory data */
YX_DOCOBJ ReaderObj; /* object with document content */
const char *UrlBase; /* уникальный внешний идентификатор документа, */
/* источник данных однозначно определяет документ по этому идентификатору. */
/* одновременно этот идентификатор является поисковым атрибутом "#url" */
/* длина идентификатора не должна превышать 249 символов */
const char *MimeType; /* document format identifier */
/* должен быть одним из идентификаторов, указанных в INDEX_CONFIG::formats */
/* optional data */
const char *Charset; /* encoding, will be recognized if not defined; */
const char *UrlProp; /* свойство "адрес документа" (DP_URL), видимое в результатах поиска */
time_t ModTime;
/* off-page attributes */
EXTATTR *ExtAttrs;
size_t ExtAttrSize;
} DOCINPUT;