ВебмастерМетрикаВиджетыРекламная сетьДиректПоиск для сайтаAPI
Войти

Руководство по установке и эксплуатации

В формате PDF

Структуры данных, используемые в индексаторе

Конфигурация индексатора, описанная ниже, инициализируется индексатором в начале своей работы на основании конфигурационного файла индексатора, описанного в разделе Директивы конфигурационного файла индексатора и передается в парсеры и источники данных (см. 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;