IBM Books
(C) IBM Corp. 2000, 2003.

Net Search Extender

管理和用户指南

CREATE INDEX

此命令对文本列创建全文本索引以供在 DB2 Net Search Extender 全文本查询中使用。

在分布式 DB2 环境中,全文本索引是对在其上定义用户表的表空间的每个分区创建的。不允许对表空间的分布进行后续更改,这将导致在执行管理命令和搜索过程中产生意外行为。

授权

根据 DB2 目录视图,此命令中的用户标识必须对在其中创建全文本索引的表具有 CONTROL 特权。

命令语法

>>-CREATE-INDEX--+------------------+--index-name FOR TEXT------>
                 '-index-schema-"."-'
 
>--ON--+------------------+--table-name------------------------->
       '-table-schema-"."-'
 
>--+-(text-column-name)--------------------------------------------+-->
   '-+-----------------------+--function-name-(-text-column-name-)-'
     '-|function-schema "."|-'
 
>--+------------------+--+----------------------------+--------->
   '-|attribute-list|-'  '-|text-default-information|-'
 
>--+--------------------------+--+-------------------+---------->
   '-|update-characteristics|-'  '-|storage-options|-'
 
>--+-------------------------------+---------------------------->
   '-|cache-search-result-options|-'
 
>--+-------------------------------+---------------------------->
   '-|index-configuration-options|-'
 
>--+----------------------+------------------------------------><
   '-|connection-options|-'
 
attribute list:
 
                  .-','------------------------------------------.
                  V                                              |
|--ATTRIBUTES--(----SQL-column-expression--+-------------------+-+--)--|
                                           '-AS-attribute-name-'
 
text-default-information:
 
|--+--------------+--+--------------------+--------------------->
   '-CCSID--ccsid-'  '-LANGUAGE--language-'
 
>--+-----------------------------------------+------------------|
   '-FORMAT--format--+---------------------+-'
                     '-|model-information|-'
 
model-information:
 
|--DOCUMENTMODEL--documentmodel-name--IN--modelfilepath--------->
 
>--+--------------------+---------------------------------------|
   '-USING-CCSID--ccsid-'
 
update-characteristics:
 
|--+------------------------------------------+----------------->
   '-UPDATE-FREQUENCY--+-NONE---------------+-'
                       '-|update-frequency|-'
 
>--+-|incremental-update-characteristics|-+---------------------|
   '-RECREATE INDEX ON UPDATE-------------'
 
incremental-update-characteristics:
 
|--+----------------------------+------------------------------->
   '-UPDATE-MINIMUM--minchanges-'
 
>--+---------------------------+-------------------------------->
   '-REORGANIZE--+-AUTOMATIC-+-'
                 '-MANUAL----'
 
>--+---------------------------------+--------------------------|
   +-COMMITCOUNT-FOR-UPDATE--count---+
   '-|capture-table-characteristics|-'
 
capture-table-characteristics:
 
|--REPLICATION-CAPTURE-TABLE------------------------------------>
 
>--+--------------------------+--capture-table-name------------->
   '-capture-table-schema-"."-'
 
>--CONTROL TABLE SCHEMA--capture-control-schema-----------------|
 
update-frequency:
 
|--D--(--+-*---------+--)--H--(--+-*----------+--)--M----------->
         | .-,-----. |           | .-,------. |
         | V       | |           | V        | |
         '---0...6-+-'           '---0...23-+-'
 
      .-,------.
      V        |
>--(----0...59-+--)---------------------------------------------|
 
storage-options:
 
|--+----------------------------+------------------------------->
   '-INDEX-DIRECTORY--directory-'
 
>--+-------------------------------+---------------------------->
   '-WORK-DIRECTORY--workdirectory-'
 
>--+-------------------------------------------+----------------|
   '-ADMINISTRATION-TABLES-IN--tablespace-name-'
 
cache-search-results-options:
 
|--CACHE TABLE-------------------------------------------------->
 
      .-','-------------------------------------------.
      V                                               |
>--(----SQL-column-expression--+--------------------+-+--)------>
                               '-AS--attribute-name-'
 
>--+-------------------------------+--+---------------------+--->
   +-PERSISTENT--+---------------+-+  '-PCTFREE--percentage-'
   |             '-IN--directory-' |
   '-TEMPORARY---------------------'
 
>--MAXIMUM CACHE SIZE--memsize---------------------------------->
 
>--+------------------------------------------------------+----->
   '-INITIAL SEARCH RESULT ORDER--(--SQL-order-by-list--)-'
 
>--+------------------------------------------------------+-----|
   '-KEY COLUMNS FOR INDEX ON VIEW--(SQL-columnname-list)-'
 
index-configuration-options:
 
                           .-,------------.
                           V              |
|--INDEX CONFIGURATION--(----option-value-+--)------------------|
 
connection-options:
 
|--CONNECT-TO--database-name--+-------------------------------+--|
                              '-USER--userid--USING--password-'
 
 

命令参数

index schema
文本索引的模式。将该模式用作特定于索引的管理表的 DB2 模式名。如果没有指定任何模式,则使用 DB2 连接的用户标识。注意,索引模式必须是有效的 DB2 模式名。

index name
索引的名称。它与索引模式一起用来唯一地标识数据库中的全文本索引。它还用作索引事件表的名称。

有关详细信息,参见附录 C, Net Search Extender 信息目录。注意,索引名必须是有效的 DB2 索引名。

table schema
为其创建索引的表、昵称或视图的模式。如果没有指定任何模式,则使用 DB2 连接的用户标识。

table name
在已连接的数据库中包含为其创建了全文本索引的列的文本表、昵称或视图的名称。

注意,当表名不是指 DB2 基本表时,具有下列限制:

text-column-name
包含用于创建全文本索引的文本的列名。一列必须具有下列类型之一:

如果列类型不属于以上任何类型,则使用 function-schema.function-name 指定变换函数用来转换列类型。

注意,如果使用 Data Link 列,则一定会取装引用的内容用来建立索引。这是通过作为 Data Link 值的一部分的协议(例如,Http)来实现的。当使用除了“file”或“unc”之外的协议时,确保服务器支持作为 Data Link 值的一部分的这些协议。由于获取文件内容可能需要代理服务器,因此,数据库管理员可以在创建索引之前在 DB2EXT.PROXYINFORMATION 表中指定它们。

注意,允许具有相同列的几个索引,但是,只有满足下列条件时才允许:

索引是对视图创建的
因此,不能在 CONTAINSSCORENUMBER OF DOCUMENTS 搜索自变量中使用索引。

索引是对表创建的
如果所有索引都是同步的,则它们在下列 CREATE INDEX 命令详细信息中同一个列上具有完全相同的属性:
  • Function name and schema
  • ATTRIBUTES
  • CCSID
  • LANGUAGE
  • FORMAT
  • DOCUMENTMODEL
  • INDEX CONFIGURATION

因此,CONTAINSSCORENUMBER OF DOCUMENTS 自变量选择哪个索引并不重要。

function-schema.function-name
用来存取在具有不受支持类型的一列中的文本文档的用户定义函数的模式和名称。该函数使用任意列类型的一个输入参数来执行列类型转换。它返回 Net Search Extender 支持的其中一种类型的值。

ATTRIBUTES (SQL-column-expression AS Attribute-name, ...)
确保除了文本列之外还对列表达式的内容建立了索引。也可以通过搜索语句中的 ATTRIBUTE 子句来搜索此内容。必须使用对其创建索引的表的非限定列名来定义 SQL 列表达式。唯一允许的数据类型为双精度型。可以在列表达式中使用强制转型运算符,但是,不可能进行 DB2 的隐式强制转型。属性名必须遵循文档模型中的属性名的规则,并且必须与索引模型定义文件中的属性名不同。

通过使用下列规则来确定表达式的属性名:

例如:ATTRIBUTES (CAST(JULIAN_DAY(date) AS DOUBLE) as day, (price1+price2)/2 as avg_price)

注意:不带引号的属性将映射为大写,并且必须在搜索期间以此方式指定。

CCSID ccsid
当对文本文档建立索引时,使用“编码字符集标识符”。缺省值来自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='CCSID'。

LANGUAGE language
有关列表,参见附录 E, 受支持的语言。缺省值来自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='LANGUAGE'。

FORMAT format
一列中的文本文档的格式,例如,HTML。此信息对于为文档建立索引是必需的。有关结构化文档支持的文档格式的列表,参见文档格式和受支持的代码页

对于结构化文档格式,可以在文档模型文件中指定信息。如果没有指定任何文档模型,则使用缺省文档模型来对文档的文本建立索引。参见文档模型

如果没有指定格式关键字,则缺省值来自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='FORMAT'。

DOCUMENTMODEL documentmodel-name IN modelfilepath
modelfilepath 指定模型文件的位置。这包含 FORMAT 子句中的格式的模型定义。DB2 实例所有者必须可以读取它。文档模型使您能够对文档的特定部分建立索引和进行搜索。可以在文档模型中定义标记(markup tag)和节名。将文档模型绑定至支持 HTML、XML 或 GPP 结构的文档格式。在一个模型文件中只能指定一种文档模型。

由于在搜索条件中不需要引用文档模型,因此,使用模型文件中的所有节名。有关文档模型的详细信息,参见Chapter 9, 使用结构化文档。注意,由于只有在执行 CREATE INDEX 命令期间才读取文档模型,因此,不能识别此索引的任何后续更改。

注意,在分布式 DB2 环境中,在每个节点上都必须能够使用共享文件系统来存取 modelfilepath

USING CCSID ccsid
指定 CCSID 来解释模型文件的内容。缺省值来自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='MODELCCSID'。

UPDATE FREQUENCY
索引更新频率确定何时进行更新。如果对用户表的更改数小于由 UPDATE MINIMUM 选项指定的更改数,则不会更新索引。如果不指定 UPDATE FREQUENCY,则使用缺省值 NONE,以便不再进行任何索引更新。这在将不对文本列进行任何更改时很有用。

缺省值来自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='UPDATEFREQUENCY'。

UPDATE MINIMUM minchanges
在 UPDATE FREQUENCY 自动更新索引之前允许对文本文档进行的最小更改数。允许正整数值。缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='UPDATEMINIMUM'。

注意,在 DB2TEXT UPDATE 命令中会忽略此值。此选项不能与 RECREATE INDEX ON UPDATE 选项配合使用,原因是没有日志表和增量更新的触发器,更改数不可用。

对于分布式数据库,对每个节点检查 UPDATE MINIMUM。

REORGANIZE AUTOMATIC/MANUAL
如果指定了 REORGANIZE AUTOMATIC,则使用更新频率执行的更新将只识别索引。此步骤是在更新之后根据 select REORGSUGGESTED from DB2EXT.TEXTINDEXES 的值自动完成的。

只能使用手工 UPDATE 命令并通过使用 REORGANIZE 选项来执行 REORGANIZE MANUAL。

如果省略 REORGANIZE 子句,则缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='AUTOMATICREORG'。

有关 REORGANIZE 选项的进一步信息,参见UPDATE INDEX

REPLICATION CAPTURE TABLE capture-table-schema.capture-table-name CONTROL TABLE SCHEMA capture-control-schema
对于增量更新处理,采用指定的复制捕获表而不是通常为索引创建的日志表。因此,schemanametablename 和复制捕获表名与本地 DB2(联合)数据库中的对象相关。

capture-control-schema 是复制控制表的模式名,例如,本地 DB2 上的 IBMSNAP_PRUNE_SET。在设置了复制之后,复制控制表必须可用作本地 DB2 系统上的昵称。

至少,必须具有可用于下列捕获控制表的昵称:

由于“DB2 复制中心”不会自动保证为远程捕获表和捕获控制表创建昵称,这是类似于为要对其创建文本索引的表创建昵称的手工任务。

用户表昵称与捕获表昵称中的主键列的列名必须匹配。另外,一定不能更改捕获表昵称中的 IBMSNAP_OPERATION、IBMSNAP_COMMITSEQ 和 IBMSNAP_INTENTSEQ 列的名称。

创建索引之后,列名 DB2EXT.TEXTINDEXES(LOGVIEWNAME) 和 DB2EXT.TEXTINDEXES(LOGVIEWSCHEMA) 都表示复制捕获表的本地名称。

由于 Net Search Extender 并不需要“DB2 复制中心”的所有功能,所以“更改数据”(CD)表或一致更改数据(CCD)表必须遵守下列规则:

其它先决条件包括:

注意事项和限制

确保将正确的源表名插入到注册表中。视远程 DBMS 的类型不同,必须使用远程表名或本地昵称:

  • DB2:远程表名(远程服务器上的表名)
  • 非 DB2:本地昵称(联合 DB2 数据库中的相应昵称)

必须存在用户映射本地用户才能通过昵称来存取远程数据源,而远程用户必须对表具有 CONTROL 特权。

如果 DB2 实例所有者用户标识不同于本地用户标识,则需要实例所有者用户标识的附加用户映射。

指定的基本表名一定不能是昵称的视图。这是因为视图可建立在若干个昵称基础之上,并且还可能涉及到若干个 CD 表和 CCD 表。由于在复制捕获子句中只能指定一个 CD 表或 CCD 表,所以不能支持昵称的视图。另外,不能支持远程视图的昵称,这是因为缺少主键。

C(C)D 表必须是昵称而不能是视图或别名。

有关 DB2 Replication Guide and Reference Version 8 的信息,参见相关信息

COMMITCOUNT FOR UPDATE count
对于增量更新处理,可以指定落实计数,有关进一步的信息,参见UPDATE INDEX。如果未指定它,则缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='COMMITCOUNT'。

可以在 DB2EXT.TEXTINDEXES.COMMITCOUNT 中找到索引的 COMMITCOUNT FOR UPDATE 值。可以使用 ALTER INDEX 命令对每个索引更改此值。它还适用于根据 UPDATE FREQUENCY 规范的已调度更新处理。如果值为 0,则意味着更新是在一个事务中完成的,如果值大于 0,则指定要在一个事务中处理的文档数。

使用 commitcount 会对性能有影响。有关信息,参见性能注意事项

RECREATE INDEX ON UPDATE
这不允许增量索引更新,但是会在(由命令或已调度的更新)执行更新操作时重新创建索引。有关附加信息,参见UPDATE INDEX上的“使用说明”。
注意

没有对用户表创建任何触发器,也没有创建日志表。

INDEX DIRECTORY directory
要用来存储文本索引的目录路径。由于该目录将包含索引数据,因此应确保 DB2 实例所有者用户标识对该目录具有读/写和执行许可权。

缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME=INDEXDIRECTORY'。在该目录下创建了一个子目录 NODE<nr> 以区分服务器的逻辑节点上的索引。

注意,在分布式 DB2 环境中,每个物理节点上都必须存在此目录。

WORK DIRECTORY directory
(可选)可以指定独立的工作目录,该目录将在执行索引搜索和管理操作期间用来存储临时文件。该目录必须存在,并且对于 DB2 实例所有者标识都具有读/写和执行许可权。

缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='WORKDIRECTORY'。在该目录下创建了一个子目录 NODE<nr> 以区分服务器的逻辑节点上的索引。

注意,在分布式 DB2 环境中,每个物理节点上都必须存在此目录。

ADMINISTRATION TABLES IN tablespace-name
为索引创建的管理表的常规表空间的名称。表空间必须存在。如果不指定此项,则会选择用户表的表空间(如果索引是对基本表创建的)。

对于昵称或视图,DB2 将选择缺省表空间。

当为分布式 DB2 环境中的存储过程搜索而对视图、昵称或文本索引创建文本索引时,表空间必须属于单个节点。

CACHE TABLE (SQL-column-expression-list)
除了索引之外,还会构建高速缓存表,该表由指定的列表达式组成。此高速缓存用来通过存储过程搜索返回结果集而不必将全文本搜索结果与 DB2 表连接起来。注意,始终可以执行将全文本索引与 CONTAINS 函数配合使用的常规 DB2 搜索。

使用对其创建索引的表的非限定列名来定义 SQL 列表达式。允许的 SQL 列表达式类型是所有内置的和用户定义的单值类型。结果集中的列名是使用下列规则确定的:

不支持将 CLOB 数据类型作为高速缓存数据类型。需要将这些数据类型强制转型为 VARCHAR。

注意

注意,如果结果集的列名不是互不相同的,则 CREATE INDEX 命令会返回错误。还要注意,在创建之后,高速缓存表不是隐式激活的,例如,在执行 DB2TEXT ACTIVATE CACHE 之前,不可能执行由存储过程执行的搜索。

仅当用户表存储在具有单个节点的表空间中时,才能在分布式 DB2 环境中使用此选项。

PERSISTENT IN directory
指定创建的高速缓存是持久的,并且可在取消激活或系统重新引导之后短暂激活。持久高速缓存存储在指定的目录中。

注意,如果没有指定目录,则缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='CACHEDIRECTORY'。

TEMPORARY
指定高速缓存不是持久存储的。如果既没有指定 PERSISTENT,也没有指定 TEMPORARY,则缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='USEPERSISTENTCACHE'。

MAXIMUM CACHE SIZE memsize
指定在 DB2TEXT ACTIVATE CACHE 期间要构建的高速缓存表的最大大小。必须以兆字节为单位将 memsize 参数指定为正整数。没有为 memsize 指定缺省值。如果该整数太小,则 ACTIVATE CACHE 命令将失败。实际高速缓存大小是在执行 ACTIVATE CACHE 命令期间计算的。

不同平台上对最大高速缓存大小的限制是:

有关更多信息,参见附录 B, 使用大量内存

PCTFREE percentage
指定要为附加文档保留的高速缓存的百分比。该百分比必须是小于 100 并且大于或等于 0 的整数。如果未指定此项,则缺省值取自 DB2EXT.DBDEFAULTS 视图,其中 DEFAULTNAME='PCTFREE'。

有关详细信息,参见ACTIVATE CACHE

INITIAL SEARCH RESULT ORDER (SQL-order-by-list)
指定在初次建立索引期间用于检索用户表内容的次序。当使用此选项时,通过跳过对全文本搜索结果进行动态排序,文档就会象存储在高速缓存结果表中一样按它们的建立索引次序返回。

有关进一步的信息,参见Chapter 16, 存储过程搜索函数

注意

对于增量更新之后的新文档或已更改的文档,不能确保该索引次序。例如:INITIAL RESULT ORDER(length(column1) asc, column2+column3 desc)

KEY COLUMNS FOR INDEX ON VIEW (SQL-columnname-list)
如果对视图创建了索引,则必须指定 KEY COLUMNS FOR INDEX ON VIEW 子句,否则,“一定不能”指定该子句。列名列表指定 “唯一地”标识视图中的一行的列。

由于 DB2 不能对主键检查这种唯一性,因此,用户应负责确保等价的唯一性。指定的列为索引构建日志表的一部分。

INDEX CONFIGURATION (option-value), ...
这些是索引配置值。缺省值加上了下划线
选项 描述
TreatNumbersAsWords 0 或 1 将一系列数字解释为独立的词语,即使它们与字符相邻也是这样,例如,缺省值 0 意味着将 tea42at5 看作是一个词语。
IndexStopWords 0 或 1 在建立索引期间考虑或者忽略无用词。目前,无用词列表是 <instance>/sqllib/db2ext/resources 目录中的一个 UCS-2 文件 <language>.tsw。创建索引之后,更改此文件没有任何影响。还要注意,<language> 是 CREATE INDEX 命令中的 LANGUAGE 值。
UpdateDelay 指定不使用捕获表的增量更新的持续时间(以秒计)。将仅从日志表中抽取早于此持续时间的条目。这将避免丢失更新,例如,在用户事务对更新命令有影响的事务情况中,未反映在索引中的文档更改。因此,UpdateDelay 参数应设置为对其创建索引的表的用户写事务的最长持续时间。

CONNECT TO database-name
作为此命令的目标的数据库的名称。如果设置了 DB2DBDFT 并且用户正在服务器上运行命令,则可以省略此参数。注意,用户标识必须具有必需的 DB2 权限。

USER userid USING password
使用 passworduserid 来连接至数据库。如果未指定它们,则会尝试使用当前用户标识而不带密码来建立连接。

对数据库的更改

对共享内存的更改
因循 ACTIVATE 执行:如果使用了 CACHE TABLE 子句,则会在共享内存中构建结果表的高速缓存。

对文件系统的更改

用法

创建全文本索引需要用户表的主键。在 DB2 Net Search Extender V8.1 中,可以使用包含多列的 DB2 主键,没有任何类型限制。但是,要使用表值搜索,不允许任何复合主键。

主键列的数目最多为 14 列,所有主键列的总长度最长为 1024 - 14 = 1010 个字节。

注意

在创建索引之后,一定不能使用 ALTER TABLE 命令来更改主键列或视图键列的长度。

用户表、全文本索引和高速缓存的结果表之间的同步是在执行更新索引命令期间完成的。有关进一步的信息,参见UPDATE INDEX


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]