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

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

В формате PDF

Индексирование данных через интерфейс ODBC

Для работы модуля, описываемого в этом разделе, под Unix на компьютере должен быть установлен ODBC-менеджер unixODBC. Также необходим ODBC-драйвер для нужной базы данных, например odbc-postgresql для PostgreSQL.

Конфигурационный файл индексатора

Пример

a)

<DataSrc>
    Name : myname
    Module : libyodbc2.so
    Symbol : ODBC_DATASRC_LIB
    Config : sqldb.cfg
</DataSrc>

b)

<DataSrc>
    Name : myname
    Module : libyodbc2.so
    Symbol : ODBC_DATASRC_LIB
    <Odbcds>
        ...
    </Odbcds>
</DataSrc>

c)

<DataSrc id="odbcds">
    Name : myname
    Config : sqldb.cfg
</DataSrc>

d)

<DataSrc id="odbcds">
    Name : myname
    <Odbcds>
        ...
    </Odbcds>
</DataSrc>

Здесь myname - произвольный идентификатор, отличающий один источник данных от другого, а sqldb.cfg - произвольное имя конфигурационного файла для источника данных.

Ниже в этом разделе мы рассмотрим директивы этого конфигурационного файла.

Директивы конфигурационного файла источника odbcds

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

Пример

<Odbcds>
    DataSourceName : test
    UserName : test
    Password : 1234
    DocQuery : SELECT * FROM table
    DocFilter : WHERE id=$1
    UrlQuery : SELECT id FROM table
    DelUrlQuery : SELECT * FROM table WHERE not_indexed=1
    MimeType : text/html
    Charset : utf-8
    Template : /absolute/path/to/doc.template
    TimeStamp : $2
</Odbcds>
Директива Описание
DataSourceName Задает идентификатор драйвера, который будет использоваться для доступа к данным. Должен совпадать с одним из заданных в локальном файле настроек ODBC ~/.odbc.ini либо в системной файле /etc/odbc.ini (возможно, в вашем случае этот файл должен быть задан переменной среды окружения ODBCINI).

Пример:

DataSourceName : PostgreSQL
UserName

Идентификатор пользователя с правами на чтение базы данных.

Необязательная директива.

Пример:

UserName : mylogin
Password

Пароль пользователя.

Необязательная директива.

Пример:

Password : mypasssword

Генерация имени и содержимого документа

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

Есть два способа получения имен документов:

  • Через директиву UrlQuery.

    В этом случае именем документа будет URL, компонентами которого являются значение директивы Name секции DataSrc конфигурационного файла индексатора и значения полей, указанных в директиве UrlQuery, разделенные символом '/' (слэш).

    В самом начале работы модуля будет выполнен запрос к базе данных для получения списка имен всех индексируемых документов. Затем для получения содержимого документов будут последовательно выполнены запросы, сгенерированные из значений директив DocQuery и DocFilter и соответствующие полученным на предыдущем этапе именам документов.

  • Через директиву DocQuery.

    Именем документа в этом случае будет URL, компонентами которого являются значение директивы Name секции DataSrc конфигурационного файла индексатора и значение первого поля из запроса, заданного директивой DocQuery.

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

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

Шаблон генерируемого документа определяется директивой Template.

Директивы, используемые для генерации имени и содержимого документа

Директива Описание
DocQuery

SQL-запрос для получения информации о записях базы данных, необходимой для генерации документа.

Обязательная директива.

Пример:

DocQuery : SELECT id,m_time,title,content FROM mydata

Здесь id, m_time, title, content - имена полей таблицы mydata.

DocFilter

Дополнение к запросу, определенному директивой DocQuery, позволяющее получить одну запись БД, соответствующую заданному имени документа.

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

В запросе следует употребить параметры с именами $1-$N, где $k - порядковый номер поля в имени документа.

Обязательная директива.

Пример:

DocFilter : WHERE id=$1
UrlQuery Необязательная директива, задающая SQL-запрос, при помощи которого можно получить список всех записей базы данных, подлежащих индексированию. Обычно это оператор SELECT по полю или нескольким полям с неповторяющимися значениями (по первичному ключу, если пользоваться терминологией баз данных).

Пример:

UrlQuery : SELECT id FROM mydata

Так как результатом этого запроса является совокупность всех записей таблицы по полю id, будут проиндексированы все данные, содержащиеся в таблице mydata. При этом важно, чтобы содержимое поля id было уникально.

UrlQuery : SELECT id FROM mydata WHERE id<1000

Будет проиндексирована лишь та часть таблицы, поле id которой меньше 1000.

DelUrlQuery Необязательная директива, определяющая SQL-запрос, при помощи которого можно получить список имен документов, подлежащих удалению из индекса. Обычно это оператор SELECT, позволяющий сгенерировать такой же URL, который был приписан документу при его индексировании.

Пример:

UrlQuery : SELECT id FROM mydata WHERE not_indexed==1

Результатом этого запроса является совокупность всех записей таблицы по полю id, для которых значение поля not_indexed равно 1.

Template

Указывает путь к файлу с шаблоном документа.

В шаблоне следует употребить параметры с именами $1-$N, где $k - порядковый номер поля в директиве DocQuery. В процессе индексирования будут подставлены значения для текущей записи.

Пример:

DocQuery : SELECT id,m_time,title,content FROM mydata
DocFilter : WHERE id=$1
Template : doc.template

Файл doc.template имеет следующий вид:

<HTML>
  <HEAD>
    <META NAME="m_time" CONTENT="$2">
    <TITLE>$3</TITLE>
  </HEAD>
  <BODY>
    $4
  </BODY>
</HTML>

В этом примере $2 соответствует полю с именем m_time, $3 - полю с именем title, $4 - полю с именем content.

Чтобы задать в шаблоне '$', напишите его дважды.

Пример:

<HTML>
  <BODY>
    $4
    $$ - это знак доллара
  </BODY>
</HTML>
TimeStamp

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

Необязательная директива.

Примеры:

TimeStamp : m_time
TimeStamp : $2

Если директива DocQuery имеет значение

DocQuery : SELECT id,m_time,title,content FROM mydata

то шаблон $2 определяет второе поле из запроса, т.е. поле с именем m_time.

MimeType

Указывает формат документа, генерируемого с помощью шаблона Template. Формат документа должен совпадать с одним из форматов, определенных в секциях DocFormat.

Необязательная директива.

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

Пример:

MimeType : text/xml
Charset

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

Аргументы директивы описаны ниже.

Необязательная директива.

Примеры:

DocQuery : SELECT id,m_time,title,content,mimetype,charset FROM mydata
DocFilter : WHERE id=$1
Charset : windows-1251
Redirect

Необязательная директива, задающая шаблон для генерации ссылки на найденный документ.

Используется при поиске.

При отображении ссылки на веб-странице будут подставлены нужные значения полей.

В шаблоне можно использовать параметры с именами $1-$N, где $k - порядковый номер поля в директиве UrlQuery, если она использовалась для получения списка имен, либо $1, если для генерации имени документа использовалась директива DocQuery.

Пример:

Redirect : http://myserver.ru/script.asp?id=$1

Аргументы директивы Charset

Описание директивы приведено выше.

Аргумент Описание
recognize Распознавать кодировку символов автоматически, с помощью анализа текста документа.
<значение кодировки> Использовать одно из указанных ниже в таблице кодировок значений.

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

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

Кодировка Обозначение
WinCyrillic windows-1251, cp1251
MacCyrillic MacCyrillic, MacRussian
DOSCyrillic IBM855 или cp855
DOSCyrillicRussian IBM866, cp866
ISOLatinCyrillic ISO-8859-5, iso-ir-144
WinLatin1 windows-1252, cp1252
WinLatin2 windows-1250, cp1250
KOI8R KOI8-R, csKOI8R
ISO8859_2 iso-2, iso_8859-2
UTF8 utf8, utf-8

Пример файла конфигурации для индексирования и поиска по базе данных (ODBC)

Пример

В конфигурационном файле индексатора задаем секцию DataSrc следующего вида (см. раздел Модуль источника данных).

<DataSrc>
    Name  : odbc_datasrc
    Module : libydodbc2.so
    Config : odbc_datasrc.cfg
</DataSrc>

Здесь odbc_datasrc - произвольный идентификатор, определяющий имя источника данных, а odbc_datasrc.cfg - имя конфигурационного файла для источника данных.

Содержимое файла odbc_datasrc.cfg может быть таким:

DataSourceName : MySQL
BaseName : mydb
UserName : search_user
Password : search_user_pass
DocQuery : SELECT id,m_time,title,content FROM mydata
DocFilter : WHERE id=$1
TimeStamp : m_time
Template : doc.template
MimeType : text/html

Файл doc.template шаблона документа имеет следующий вид.

  <HTML>
    <HEAD>
      <META NAME="id" CONTENT="$1">
      <META NAME="m_time" CONTENT="$2">
      <TITLE>$3</TITLE>
    </HEAD>
    <BODY>
      $4
    </BODY>
  </HTML>