etx_CreateCharSet() 例程

etx_CreateCharSet() 例程将创建用户定义字符集。

语法

etx_CreateCharSet (charset_name, file_name)

元素 用途 数据类型
charset_name 用户定义字符集的名称。如果输入的名称超过 18 个字符,该名称将自动截断至 18 个字符。 CHAR (18)
file_name 文本搜索引擎从中装入字符集的操作系统文件的绝对路径名。该文件可以位于服务器或客户机机器上。首先搜索的是客户机机器。 LVARCHAR

返回类型

无。

用法

当您针对列创建 etx 索引时,可以指定用来对文本数据创建索引的字符集。字符集指示要对哪些字母建立索引;文本数据中任何未在字符集内列出的字符都将转换为空格。使用 CHAR_SET 索引参数来指定字符集的名称。必须首先创建用户定义字符集,然后才能使用它来创建 etx 索引。

GBase 8s Excalibur Text Search DataBlade 模块提供了三种内置字符集:ASCII、ISO 和 OVERLAP_ISO。每种内置字符集都仅包含字母数字字符,并将小写字母映射为大写字母。这足以满足大多数文本搜索的需求。有关这三种内置字符集的完整描述,请参阅字符集

但是,您有时可能需要对非字母数字字符建立索引,或需要区分小写和大写字母。在这些情况下,必须定义您自己的字符集。

要定义您自己的字符集,首先需要创建一个操作系统文件,以指定要建立索引的字符。接下来的部分将详细描述该操作系统文件的结构。

然后,通过执行 etx_CreateCharSet() 例程来创建字符集。该例程有两个参数:您为用户定义字符集提供的名称;要建立索引的字符所在操作系统文件的完整路径名。新的用户定义字符集存储在缺省的智能大对象空间中。
限制: 您不能将关键字 ASCII、ISO 或 OVERLAP_ISO(大小写字母的任意组合)用作用户定义字符集的名称,因为这些关键字是为内置字符集保留的。

要使用用户定义字符集,请在 CREATE INDEX 语句的 CHAR_SET 索引参数中指定其名称。

操作系统字符集文件的结构

操作系统文件包含 16 行,每行均有 16 个十六进制数,加上包含注释的可选行。每个位置与一个 ASCII 字符对应。如果希望对该位置中的字符建立索引,请输入该字符的十六进制值。如果不希望对该字符建立索引,请输入 00

字符集中的 ISO 8859-1 表列出了在创建操作系统文件时可作为引用使用的 ISO 8859-1 字符集。

注释以斜杠、短线或 # 字符开头,可以出现在文件的任意位置。

例如,如果希望创建用户定义字符集,并对其中的连字符(十六进制值为 0x2D)、下划线(十六进制值为 0x5F)、反斜杠(十六进制值为 0x5C)和正斜杠(十六进制值为 0x2F)以及字母数字字符 0 到 9、a 到 z 及 A 到 Z 建立索引,并将小写字母 a 到 z 映射到大写字母,那么操作系统文件会与下列示例相似:
# Character set that indexes hyphens and 
/ alphanumeric characters. All lower case letters
\ are mapped to upper case.
- Note the different ways of specifying that a 
# line is a comment.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 2D 00 2F
30 31 32 33 34 35 36 37 38 39 00 00 00 00 00 00
00 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 00 5C 00 00 5F
00 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
50 51 52 53 54 55 56 57 58 59 5A 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

这类似于内置 ASCII 字符集,不同之处在于对连字符、下划线、正斜杠和反斜杠也建立了索引,而不是将其转换为空格。之所以对这四个字符建立索引,是因为矩阵中每个字符的位置包含其十六进制表示法:0x2D0x5F0x5C0x2F

通过在小写字母位置上指定大写十六进制值,将小写字母映射为大写字母。

例如,大写字母 A 的十六进制值为 0x41。矩阵中大写字母 A 的位置包含十六进制值 0x41,因此对大写字母 A 建立的索引为大写的 A

但是,矩阵中小写字母 a 的位置也包含十六进制值 0x41(表示大写的 A),而不是小写字母 a 的实际十六进制表示 0x61。这样,小写字母 a 就映射为大写的 A,即,将小写 a 视作大写 A 来建立索引。对于 azAZ 的所有字母同样如此。

有关 ISO 8859-1 表的更多信息,请参阅 ISO 8859-1 字符集

示例

下列示例创建名为 my_charset 的用户定义字符集:
EXECUTE PROCEDURE etx_CreateCharSet 
    ('my_charset', '/local0/excal/my_char_set_file');

搜索引擎从操作系统上名为 /local0/excal/my_char_set_file 的文件装入 my_charset 的内容并进行存储。