| | Индексирование данных через интерфейс ODBC
Для работы модуля, описываемого в этом разделе, под Unix на компьютере должен быть установлен ODBC-менеджер unixODBC. Также необходим ODBC-драйвер для нужной базы данных, например odbc-postgresql для PostgreSQL.
Конфигурационный файл индексатора
Пример
a)
b)
c)
d)
<DataSrc id="odbcds">
Name : myname
<Odbcds>
...
</Odbcds>
</DataSrc>
Здесь myname - произвольный идентификатор, отличающий один источник данных от другого, а sqldb.cfg - произвольное имя конфигурационного файла для источника данных.
Ниже в этом разделе мы рассмотрим директивы этого конфигурационного файла.
Директивы конфигурационного файла источника odbcds
В разделе описаны директивы, относящиеся к процессу индексирования через стандартный источник odbcds. Если какая-либо директива отсутствует в конфигурационном файле, для соответствующих параметров будут использованы указанные значения по умолчанию.
| Директива |
Описание |
|
DataSourceName
|
Задает идентификатор драйвера, который будет использоваться для доступа к данным. Должен совпадать с одним из заданных в локальном файле настроек ODBC ~/.odbc.ini либо в системной файле /etc/odbc.ini (возможно, в вашем случае этот файл должен быть задан переменной среды окружения ODBCINI). |
|
Пример:
DataSourceName : PostgreSQL
|
|
UserName
|
Идентификатор пользователя с правами на чтение базы данных.
Необязательная директива.
|
|
Пример:
|
|
Password
|
Пароль пользователя.
Необязательная директива.
|
|
Пример:
|
Генерация имени и содержимого документа
Для всех индексируемых записей базы данных нужно уметь генерировать имена и содержимое документов.
Есть два способа получения имен документов:
-
Через директиву 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 - порядковый номер поля в имени документа.
Обязательная директива.
|
|
Пример:
|
|
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, в котором содержатся данные, указывающие время последнего обновления записи.
Необязательная директива.
|
|
Примеры:
Если директива DocQuery имеет значение
DocQuery : SELECT id,m_time,title,content FROM mydata
то шаблон $2 определяет второе поле из запроса, т.е. поле с именем m_time.
|
|
MimeType
|
Указывает формат документа, генерируемого с помощью шаблона Template. Формат документа должен совпадать с одним из форматов, определенных в секциях DocFormat.
Необязательная директива.
Значение по умолчанию: text/html.
|
|
Пример:
|
|
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 следующего вида (см. раздел Модуль источника данных).
Здесь odbc_datasrc - произвольный идентификатор, определяющий имя источника данных, а odbc_datasrc.cfg - имя конфигурационного файла для источника данных.
Содержимое файла odbc_datasrc.cfg может быть таким:
Файл doc.template шаблона документа имеет следующий вид.
<HTML>
<HEAD>
<META NAME="id" CONTENT="$1">
<META NAME="m_time" CONTENT="$2">
<TITLE>$3</TITLE>
</HEAD>
<BODY>
$4
</BODY>
</HTML>
| |