Tivoli 服务台 6.0 开发工具包脚本语言参考

IM4T 文本检索

返回主页

简介

Tivoli 服务台(TSD) 使用名为 文本智能挖掘器 (IM4T) 的 IBM 文本检索产品来为数据库中的表创建索引。服务台分析员可以使用它创建的索引快速查找包含某些字或字的组合的数据库中的特定条目(已存在的数据文件或文档)。索引不影响存储数据的原始格式。

本部分说明下列内容:

IM4T 包含在 TSD 软件中,并且使用它不需要附加的许可费用。

配置 IM4T 服务器

IM4T 使用客户机/服务器结构体系来编制数据库表的索引。所有的索引都是在一台服务器上创建和维护的。运行 TPM 的每个工作站将其本身配置成服务器的客户机。

必须为索引创建和配置服务器后才能使用 TSD 的文本检索性能。该过程的第一步是在已经指定为 IM4T 服务器的机器上安装 TSD。必须安装标题为 “IM4T 服务器安装”的软件包。要配置 IM4T 服务器,请执行下列操作:

  1. 选择“开始”、“程序”、“TDT”,然后选择“IM4T 服务器版本”图符。
  2. 注册到数据源。
    打开一个带有下述消息的对话框:“没有为该数据库配置 IMT4 服务器,请配置 IMT4 服务器。是否想要创建服务器?”
  3. 请选择下列选项之一:

    - 关闭对话框和 IMT4。
    - 打开“配置服务器窗口”。
  4. 结果:打开“Tivoli 服务台 IMT 维护窗口”。请填写下列字段:

    节段/字段 必需信息
    名称 服务器名称
    连接信息节段
    主机 计算机的 IP 名
    端口 端口号码。应当在 etc/services 文件中为服务器创建条目。注:该号码应当用于一个端口,并要求 LAN 上没有其他程序正在使用该端口。
    任务信息节段
    最大 搜索服务能同时处理的任务的最大数目(介于 1 和 100 之间)。
    超时 搜索服务接收客户机信息所需的时间。
    可用的 启动服务器时启动的任务的数目。
  5. 请单击“应用”按钮。

管理 IM4T 数据库文本索引

只能在已配置成 IM4T 服务器的机器上管理索引。

注:在 UNIX 操作系统下,还必须注册到安装 TSD 时创建的 imoadm 管理帐户。

可以通过运行 TSD 文本检索管理公用程序(tsd_text.kbc)来创建索引。这是用于配置服务器的同一公用程序。

公用程序将首先要求注册到要为其创建索引的 TSD 数据源。如果注册到的数据源还没有配置 IM4T 服务器,公用程序将提示首先进行该配置。

一旦注册并配置了服务器,将看到标题为“Tivoli 服务台 IM4T 维护”的公用程序主屏幕。

维护 IM4T 索引

tsd_text 公用程序创建“说明”或“解决方案”列的索引,这些列出现在特定种类的 Tivoli 问题管理(TPM)诊断辅助记录中。当您的数据库中有大量记录时,使用 IM4T 来查找特定的诊断辅助记录比使用“查询”对话框中的“说明”或“解决方案”框速度更快。

可在这些对话框中使用文本搜索:

注:该 tsd_text 公用程序也用于创建问题、更改和说明的索引,在 Tivoli 更改管理中进行的效应分析过程中将使用它们。其他详细信息,请参见执行效应分析

维护 IM4T 索引

可以使用 IM4T 来创建新索引和更新现存索引。在有些情况下,需要删除索引。创建、更新和删除索引需要大量时间,这取决于数据库大小。如果您的服务台在夜间不工作,可以考虑在白天下班时间开始 IM4T 索引维护活动。

创建新 IM4T 索引

必须先创建索引,然后您的服务台分析员才能使用这些“查询”对话框中的可用的“文本查询”功能:“公共问题查询”、“错误消息查询”、“热点新闻查询”和“解决方案查询”。

IM4T 索引创建方法

  1. 从“开始”菜单中,指向“Tivoli 服务台 6.0”,然后选择“IM4T 维护”。
  2. 显示“连接到数据库”对话框
  3. 输入您的数据库用户标识、口令和数据库源。
  4. 如果不知道数据库源,请选择“浏览”按钮来进行选取。
  5. 选择“确认”。显示“Tivoli 服务台 IM4T 维护”对话框。
  6. 从“选择要维护的索引”列表中,选择要创建的索引。 注:对于 TPM,请选择“解决方案/说明”和“解决方案/解决方案”。
  7. 选择“维护选项”下的“创建新索引”。
  8. 请选择“继续”。将显示一条确认消息。
  9. 选择“是”。

更新 IM4T 索引

为了确保服务台分析员能搜索到最新的解决方案和问题说明,需要定期更新索引。由于更新过程需要大量时间,请考虑在白天下班后开始此过程开始此过程后,可以不用人来照管它。

IM4T 索引更新方法

  1. 从“开始”菜单中,指向“Tivoli 服务台 6.0”,然后选择“IM4T 维护”。显示“连接到数据库”对话框
  2. 输入您的数据库用户标识、口令和数据库源。
  3. 如果不知道数据库源,请选择“浏览”按钮来进行选取。
  4. 选择“确认”。显示“Tivoli 服务台 IM4T 维护”对话框。
  5. 从“选择要维护的索引”列表中,选择要更新的索引。
  6. 选择“维护选项”下的“更新现存索引”。
  7. 请选择“继续”。将显示一条确认消息。
  8. 选择“是”。更新开始。
    注:此过程用服务器来安排更新。作了安排后,可以退出 tsd_text 公用程序,服务器将在后台确认更新。

删除 IM4T 索引

有些情况下,可能想要删除 IM4T 索引。如果从索引的显示上看出索引已被毁坏,请删除它后再创建一个索引。删除索引时不会删除数据库数据。

删除 IM4T 索引的方法

  1. 从“开始”菜单中,指向“Tivoli 服务台 6.0”,然后选择“IM4T 维护”。显示“连接到数据库”对话框
  2. 输入您的数据库用户标识、口令和数据库源。
  3. 如果不知道数据库源,请选择“浏览”按钮来进行选取。
  4. 选择“确认”。显示“Tivoli 服务台 IM4T 维护”对话框。
  5. 从“选择要维护的索引”列表中,选择要删除的索引。
  6. 选择“维护选项”下的“删除现存索引”。
  7. 请选择“继续”。将显示一条确认消息。
  8. 选择“是”。已删除索引。

查询数据库文本索引

查询数据库文本索引的目的是要在数据库中快速找到字段。要帮助达到此目的,SQLSelect 命令在特殊换码序列存在时寻找并执行 $TextSearch。此序列允许查询“文本检索”索引以及数据库。($TextSearch 序列中的有效条目是用于“文本检索”数据源的有效 WHERE 子句。) 检查下列实例。选择全部与硬件维护有关的解决方案。

Select * from solutions where $TextSearch (contains
'hardware' & 'maintenance')

选择全部与硬件维护有关的活动的解决方案。

Select * from solutions where $TextSearch (contains 'hardware' &
'maintenance') AND Active = 1

查询多个索引

如果多个“文本检索”索引与数据库中的一个表相关联,则必须在 $TextSearch 子句中指定索引名称索引名称应当放在查询之前并后跟一个分号 (;)。

Select * from solutions where $TextSearch (solNDX; description contains
'hardware') AND Active = 1 OR solution_id > 3000

配置 IM4T 客户机

要配置 IM4T 服务器,请执行下列操作:

  1. 选择“开始”、“程序”、“TDT”,然后
  2. 运行“配置编辑器”。
  3. 请单击“添加”按钮来添加新的数据源。
  4. 请选择“Intelligent Miner for Text”选项按钮。
  5. 单击“确认”按钮。“配置客户机”窗口打开。

    下表列出了“配置客户机窗口”字段和必需的信息。
  6. 节段/字段 必需信息
    搜索服务 服务实例名称(与服务器信息一样)
    主机 IM4T 服务器的 IP 名。
    端口 端口号码。注:该号码应当用于一个端口,并要求 LAN 上没有其他程序正在使用该端口。该号码应与服务器端口号码一致。
    高级按钮 允许设置高级选项。
  7. 请单击“应用”按钮。DOS 窗口迅速打开和关闭,并创建数据源。
  8. 单击“测试连接”按钮。
  9. 运行 TPM。其他信息,请参见 Tivoli 问题管理 6.0 用户帮助目录。

文档检索函数

此节是与 IM4T 一起使用的一般文档检索函数的参考。

FTRSQLTextIndexCreate

语法

FUNCTION FTRSQLTextIndexCreate(IndexName : STRING, Fields : LIST OF IndexFieldRec) : INTEGER;

自变量说明

IndexName 必须小于等于 8 个字符。以下说明IndexFieldRec 类型:

IndexFieldRec IS RECORD
 TableName : STRING; --Name of the table to
                       be indexed 
 FieldName : STRING; -Name of the field to
                       be indexed
 Flags : INTEGER; --KEY, VALUE,LITERAL, 和 LONGCHAR 的组合
  END;

此记录定义于 FTR.KB

在下表中列出 IndexFieldRec 中标志的定义。

标志

说明

SAI_DBTRNDX_KEY 数据库表中的关键字字段。传递到 SQLDBTextIndexCreateIndexFieldRec,其中至少有一个必须具有此标志集。SAI_DBTRNDX_VALUE 表示该列包含数字值。
SAI_DBTRNDX_LITERAL 表示该列包含字母值(通常为一个字符串)
AI_DBTRNDX_LONGCHAR 表示该列包含字符串(通常为一长文本字段)。传递到 SQLDBTextIndexCreateIndexFieldRec,其中至少有一个必须具有此标志集。

注: 数据库文本索引必须包含被索引的表中的每个主键字段,并且必须至少有一个类型为 LONGCHAR 的字段。

注释

以接收到的数据为基础,FTRSQLTextIndexCreate 创建具有下列特性的索引:全部字段都可以索引,并可以引用作为索引表中的文本列部分。所有关键字段都被存储在索引表中各自的列中。例如:

实例

VARIABLES NewIndex : LIST OF IndexFieldRec;
 Entry : IndexFieldRec;
ACTIONS
 Entry.TableName = `EQ_Defects';
 Entry.FieldName = `Defect_Title';
 Entry.Flags     = SAI_DBTRNDX_LITERAL;
 ListInsert(NewIndex,Entry);
 Entry.TableName = `EQ_Defects';
 Entry.FieldName = `Defect_Desc_Text';
 Entry.Flags     = SAI_DBTRNDX_LONGCHAR; ListInsert(NewIndex, Entry);
 Entry.TableName = `EQ_Defects';
 Entry.FieldName = `Defect_Steps_Text';
 Entry.Flags     = SAI_DBTRNDX_LONGCHAR;
 ListInsert(NewIndex, Entry);
 Entry.TableName = `EQ_Defects';
 Entry.FieldName =`Defect_Title';
 Entry.Flags = BitOr(SAI_DBTRNDX_KEY,
                    SAI_DBTRNDX_VALUE);
 ListInsert(NewIndex, Entry);
 FTRSQLTextIndexCreate(`DefNDX', NewIndex);
  END; 

返回码

说明

1 成功
2001 DBTR ERR 表名无效
2002 DBTR ERR 索引名无效
2003 DBTR ERR 索引字段无效
(其他) 出错码(请参见IM4T 成功/错误消息)


FTRSQLTextIndexDelete

语法

FUNCTION FTRSQLTextIndexDelete(IndexName : STRING) : INTEGER;

自变量说明

函数 说明
IndexName 指定被删除的数据库文本索引的名称

注释

FTRSQLTextIndexDelete 查找指定的索引并删除索引。例如:

 FTRSQLTextIndexDelete(`DEFNDX');

返回码

说明

1 成功
2002 DBTR_ERR_INVALID_INDEX_NAME
(其他) 出错码(请参见IM4T 成功/错误消息)


FTRSQLTextIndexUpdate

语法

 FUNCTION FTRSQLTextIndexUpdate(IndexName :
                                         STRING,
                                         Method : INTEGER) : INTEGER;

自变量说明

函数 说明
IndexName 指定更新索引的名称
Method 指定是否更新索引,或从擦除中重建索引。此变量可以为下列二值之一:

SAI_NDX_UPDATE 是缺省值。如果索引已经存在,它将被更新以反映数据中的变化。

如果索引不存在(即,仅仅定义了),此时将创建索引。

SAI_NDX_REBUILD 从擦除中建立索引,不管索引是否存在。

注释

FTRSQLTextIndexUpdate 查找指定的索引,并执行在“方法”中指定的操作例如:

FTRSQLTextIndexUpdate (`DEFNDX', SAI_NDX_REBUILD); 

返回码

说明

1 成功
2002 DBTR ERR 索引名无效
(其他) 出错码(参见IM4T 成功/错误消息)


FTRSQLTextIndexUpdateAll

语法

FUNCTION FTRSQLTextIndexUpdateAll(Method :
 INTEGER):INTEGER;

自变量说明

方法将指定是否更新索引,或从擦除中重建索引。此变量可以为下列二值之一:

SAI_NDX_UPDATE 是缺省值。如果索引已经存在,它将被更新以反映数据中的变化。如果索引不存在(即,仅仅定义了),此时将创建索引。

SAI_NDX_REBUILD 建立索引,不管索引是否存在。

注释

FTRSQLTextIndexUpdateAll 使用 Method 中定义的方法,更新当前数据源上存在的每个数据库文本索引。实例:

FTRSQLTextIndexUpdateAll(SAI_NDX_REBUILD);

返回码

说明

1 成功
(其他) 出错码(参见 IM4T 成功/错误消息部分)


FTRSQLSetFilterWhere

语法

FTRSQLSetFilterWhere (IndexName : STRING , WhereStmt : STRING) : INTEGER;

自变量说明

如果索引存在,该函数将设置索引的“Where 过滤器”。

实例

ret:=FTRSQLSetFilterWhere('MYINDEX', 'USER_ID>10000');

返回码

说明

1 成功
2002 DBTR ERR 索引名无效
2005 DBTR ERR WHERE 语句无效
(其他) 出错码(参见 IM4T 成功/错误消息部分)


FTRSQLGetFilterWhere

语法

 FTRSQLGetFilterWhere (IndexName : STRING, WhereStmt : STRING) : INTEGER; 

自变量说明

如果 Where 过滤器存在,该函数将获取索引的“Where 过滤器”。

实例

WhereStmt : STRING;

返回码

说明

1 成功
2002 DBTR ERR 索引名无效
(其他) 出错码(参见 IM4T 成功/错误消息部分)


FTRSQLDeleteFilterWhere

语法

FTRSQLDeleteFileterWhere (WhereStmt : STRING) : INTEGER;

自变量说明

如果索引存在,该函数将删除索引的“Where 过滤器”。

实例

ret:=FTRSQLDeleteFilterWhere('MYINDEX');

返回码

说明

1 成功
2002 DBTR ERR 索引名无效
(其他) 出错码(参见 IM4T 成功/错误消息部分)

FTRSQLListIndexes

语法

FTRListIndexes (Servername : STRING , ResultList : LIST OF STRINGS ) : INTEGER;

自变量说明

该函数列出服务器的所有可用的索引。

实例

IdxList:LIST OF STRING;
ret:=FTRListIndexes('MYSRVR',IdxList);

返回码

说明

1 成功
2002 DBTR ERR 索引名无效
(其他) 出错码(参见 IM4T 成功/错误消息部分)

TSD 脚本程序设计函数

FTRSQLTextIndexCreate

下例是 Tivoli 问题管理 (TPM) 解决方案表的索引,并显示
调用结果的成功/错误消息。

KNOWLEDGEBASE MakeNDX;
USES TEXTRET;
ROUTINES
PROCEDURE TestMain;
PRIVATE
ROUTINES
PROCEDURE TestMain IS
VARIABLES
Col : IndexFieldRec;
ColList : LIST OF IndexFieldRec;
Lines : List of String;
nRC : Integer;
whdl : Window;
ACTIONS
SQLCommand(`connect TOOLKIT');
Col.TableName := 'solutions';
Col.FieldName := 'solution_id';
Col.Flags := BitOr (SAI_DBTRNDX_VALUE,
SAI_DBTRNDX_KEY);
ListPush(ColList, Col);
Col.TableName := 'dbo.solutions';
Col.FieldName := 'description';
Col.Flags := SAI_DBTRNDX_LONGCHAR;
ListPush(ColList, Col);
nRC := FTRSQLTextIndexCreate('solndx', ColList);
ListInsert(Lines, nRC, $BEFORE);

WinCreateScrollWindow($Desktop, whdl,
$NullHandler,
5,5,50,15,
'Create Index',
$SystemMonospaced,
10,
$WinDefaultStyle);
WinWriteLN(whdl, Lines);
WinWait(whdl);
END;

使用 SQLSelect 查询 TSD 脚本中的数据库索引

查询实例

下列为索引查询的代码实例。

KNOWLEDGEBASE querysol;
 ROUTINES PROCEDURE TestMain;
 PRIVATE
 ROUTINES
 PROCEDURE TestMain IS
 VARIABLES
  Lines : List of String;
  nRC : Integer;
  whdl : Window;
  cursor : SQLCURSOR;
  System : String;
ACTIONS
  nRC := SQLCommand('CONNECT ADVISOR');
  IF (nRC <> 1) THEN EXIT;
  END;
ListInsert(Lines, nRC, $BEFORE);
 nRC := SQLSelect(cursor, 'SELECT SYSTEM FROM
                  SOLUTIONS WHERE
                  $TextSearch(SOLNDX;DESCRIPTION
                  CONTAINS ''PROBLEM'')');
ListInsert(Lines, nRC, $BEFORE);
 nRC := SQLFetch(cursor, System);
 WHILE (nRC = 1) DO
 ListInsert(Lines, System, $BEFORE);
 nRC := SQLFetch(cursor, System);

  END;
ListInsert(Lines, nRC, $BEFORE);
SQLCloseCursor(cursor);

 WinCreateScrollWindow($Desktop, whdl,
                      $NullHandler,
                      5,5,50,15,
                      'Query Index',
                      $SystemMonospaced,
                      10,
                      BitOr($WinDefaultStyle,
                      $WinVScroll));
WinWriteLN(whdl, Lines);
WinWait(whdl);
  END;

IM4T 成功/错误消息

错误代码 错误消息
-17407 SQLERR_NO_KEY
-17408 SQLERR_NO_LONGCHAR
-17409 SQLERR_COL_TYPE_CONFLICT
-17410 SQLERR_INDEX_NAME_NOT_FOUND
-17411 SQLERR_BAD_KEY_TYPE
-17415 SQLERR_TR_NOT_INITIALIZED
-17417 SQLERR_INVALID_TEXTSEARCH
-17420 SQLERR_INVALID_INDEX_NAME
-17424 SQLERR_TEXTMINER_DATA_BUILD
-17425 SQLERR_CANT_DETERMINE_SERVER_LOCATION
-17426 SQLERR_SECTION_FILE_SYNTAX_ERROR
-17427 SQLERR_DEFINITION_FILE_SYNTAX_ERROR
-17428 SQLERR_CANT_OPEN_FILE
-17429 SQLERR_CANT_WRITE_FILE
-17430 SQLERR_CANT_READ_FILE
-17431 SQLERR_TABLE_NAME_NOT_SET
-17432 SQLERR_ENVIRONMENT_VARIABLE_NOT_SET
-17433 SQLERR_INVALID_REMOTE_PROCEDURE
-17434 SQLERR_MISSING_LANGUAGE
-17435 SQLERR_CANT_GET_CODEPAGE
-17700 SQLERR_NOT_ENOUGH_MEMORY
-17701 SQLERR_DICTIONARY_NOT_FOUND
-17702 SQLERR_STOPWORD_IGNORED
-17703 SQLERR_CCS_NOT_SUPPORTED
-17704 SQLERR_LANGUAGE_NOT_SUPPORTED
-17705 SQLERR_CONFLICT_WITH_INDEX_TYPE
-17706 SQLERR_INVALID_MASKING_SYMBOL
-17707 SQLERR_INDEX_GROUP_SEARCH_ERROR
-17708 SQLERR_INDEX_SPECIFIC_ERROR
-17709 SQLERR_UNEXPECTED_ERROR
-17710 SQLERR_DATASTREAM_SYNTAX_ERROR
-17711 SQLERR_UNKNOWN_SESSION_POINTER
-17712 SQLERR_PROCESSING_LIMIT_EXCEEDED
-17713 SQLERR_REQUEST_IN_PROGRESS
-17714 SQLERR_MAX_NUMBER_OF_RESULTS
-17715 SQLERR_SERVER_NOT_AVAILABLE
-17716 SQLERR_SERVER_BUSY
-17717 SQLERR_SERVER_CONNECTION_LOST
-17718 SQLERR_INDEX_DELETED
-17719 SQLERR_INDEX_SUSPENDED
-17720 SQLERR_INDEX_NOT_ACCESSIBLE
-17721 SQLERR_EMPTY_QUERY
-17722 SQLERR_EMPTY_INDEX
-17723 SQLERR_FUNCTION_DISABLED
-17724 SQLERR_FUNCTION_IN_ERROR
-17725 SQLERR_INSTALLATION_PROBLEM
-17726 SQLERR_COMMUNICATION_PROBLEM
-17727 SQLERR_IO_PROBLEM
-17728 SQLERR_WRITE_TO_DISK_ERROR
-17729 SQLERR_MAX_NUMBER_OF_BUSY_INDEXES
-17730 SQLERR_UNKOWN_SECTION_NAME
-17731 SQLERR_DOCMOD_READ_PROBLEM
-17732 SQLERR_INCORRECT_AUTHENTICATION
-17733 SQLERR_CONFLICTING_TASK_RUNNING
-17734 SQLERR_NO_ACTION_TAKEN
-17735 SQLERR_LS_NOT_EXECUTABLE
-17736 SQLERR_LS_FUNCTION_FAILED
-17737 SQLERR_MAX_NUMBER_OF_TASKS
-17738 SQLERR_MISSING_DEFAULT_MODEL
-17739 SQLERR_UNKNOWN_DOCUMENT_MODEL-NAME
-17740 SQLERR_MEMBER_OF_INDEX_GROUP
-17741 SQLERR_UNKNOWN_INDEX_NAME
-17742 SQLERR_INDEX_ALREADY_OPENED
-17743 SQLERR_MAX_NUMBER_OF_OPEN_INDEXES
-17744 SQLERR_CONTINUATION_MODE_ENTERED
-17745 SQLERR_EMPTY_LIST
-17746 SQLERR_SERVER_IN_ERROR
-17747 SQLERR_FUNCTION_NOT_SUPPORTED
-17748 SQLERR_UNKNOWN_INDEX_TYPE
-17749 SQLERR_INCORRECT_INDEX_NAME
-17750 SQLERR_INCORRECT_LS_EXECUTABLES
-17751 SQLERR_INCORRECT_LIBRARY_ID
-17752 SQLERR_INCORRECT_LOCATION
-17753 SQLERR_INDEX_ALREADY_EXISTS
-17754 SQLERR_MAX_NUMBER_OF_INDEXES
-17755 SQLERR_LOCATION_IN_USE
-17756 SQLERR_UNKNOWN_SERVER_NAME
-17757 SQLERR_UNKNOWN_COMMUNICATION_TYPE
-17758 SQLERR_UNKNOWN_SERVER_INFORMATION
-17759 SQLERR_INCORRECT_HANDLE
-17760 SQLERR_QUERY_TOO_COMPLEX


IM4T 文本检索警告

警告代码 警告消息
-17510 SQLWARN_CFG_NULL_ITEM
-17511 SQLWARN_TEXTMINER_CLEANUP_ERROR
-17512 SQLWARN_PARTIAL_FAILURE


其他信息,参见下列地址的 Intelligent Miner for Text (IM4T) 文档:

http://www.software.ibm.com/data/iminer/fortext


Tivoli 服务台 6.0 开发工具包脚本语言参考

返回主页

版权所有