转 Oracle全文检索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm

SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') ;

PL/SQL 过程成功完成

SQL > EXEC ctx_ddl.create_preference ('my_test_mds','MULTI_COLUMN_DATASTORE') ;

PL/SQL 过程成功完成

SQL > exec ctx_ddl.set_attribute ('my_test_mds'、 '列'、 ' base_keyword,base_title,base_content') ;

PL/SQL 过程成功完成

SQL >
创建索引 mc_idx ON tb_knowledge_base_bk(base_title) 为索引类型是 ctxsys。上下文参数 (数据存储 my_test_mds LEXER my_test_lexer')

选择 * tb_knowledge_base_bk t 从哪里 contains(t.base_title,'转速',1) > 0 ;

选择 * 从博士 $MC_IDX$ ;

译文:
http://gjbxx110.blog.51cto.com/794841/264880

数据库版本:10g

数据库操作系统: linux as4

表test1,

创建表 TEST1
(
CHINAME VARCHAR2(4000 CHAR)
ABNAME VARCHAR2(50 CHAR)
地址 VARCHAR2(200 CHAR)
市 VARCHAR2(30 CHAR)
X NUMBER(10,5),
Y NUMBER(10,5)
POIID 号
身份证号码
)。

指定分词

oracle文档说'chinese_lexer' 只能用于utf8字符集,经测试在9i,zhs16gbk,windows也可以。
开始
ctx_ddl. .create_preference('my_lexer', 'chinese_lexer');
结束 ;
--指定检索的字段
EXECctx_ddl. .create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
EXECctx_ddl. .set_attribute('mymds', , 'chiname、 abname、 地址、 城市、 x、 y');
--建索引
创建索引 mc_idx ON test1(CHINAME) 为索引类型是 ctxsys。上下文参数 (数据存储 mymds LEXER my_lexer')
--测试
选择 * test1 在那里包含(chiname,,'中国'1) >0
--查看分词结果
选择 * 从博士 $MC_IDX$ 我
--查看错误信息
选择 * ctx_user_index_errors


参考资料:
http://docs.oracle.com/cd/B19306_01/text.102/b14218/cdatadic.htm

数据存储类型

使用数据存储类型来指定如何存储您的文本。若要创建数据存储首选项,必须使用下面的数据存储类型之一:

表 2-1 数据存储类型

数据存储类型何时使用
DIRECT_DATASTORE 数据存储在文本列的内部。每一行作为一个单独的文档编制索引。
MULTI_COLUMN_DATASTORE 在多个列中的文本表中存储数据。列连接起来以创建一个虚拟的文档,另一个用于每个行。
DETAIL_DATASTORE 数据存储在文本列的内部。文档包含存储在细节表中的文本列中含有标题信息存储在主表中的一个或多个行。
FILE_DATASTORE 数据从外部存储在操作系统的文件。文件名存储在文本列中,另一个用于每个行中。
NESTED_DATASTORE 嵌套表中存储数据。
URL_DATASTORE 数据从外部存储在位于 intranet 或 Internet 上的文件中。统一资源定位器 (Url) 存储在文本栏中。
USER_DATASTORE 在索引时合成了文件,由用户定义的存储过程。
Oracle ® 文本参考
10g版本 2 (10.2)

部件号 B14218-01
Go to Documentation Home
首页
Go to Book List
图书列表
Go to Table of Contents
内容
Go to Index
索引
Go to Master Index
主索引
Go to Feedback page
联系我们

Go to previous page
上一页
Go to next page
下一个
PDF ·斯凯·epub 格式

2 oracle 文本索引元素

这一章描述了您可以使用来创建您的 Oracle 文本索引的各种元素。

在这一章讨论了以下主题:

概述

当您使用创建索引创建索引或修改索引管理指数时,可以选择在参数字符串中指定索引的偏好、 stoplists、 和节组。指定一个首选项、 非索引字表或节组答案有关 Oracle 文本索引的文本方式的以下问题之一:

首选项类回答了这个问题
数据存储区 您的文档的存储方式?
筛选器 转换为纯文本,这些文件的如何?
词法分析器 什么语言正在被编制索引?
单词表 如何干和模糊查询是如何扩大呢?
存储 应如何存储索引表?
阻止列表 哪些词或主题是不会索引吗?
节组 查询部分启用,和如何在文档内定义节吗?

本章介绍如何设置每个首选项。可以通过在这一章中所描述的类型之一创建首选项启用选项。

例如,若要指定您的文档存储在外部文件中,可以创建称为mydatastore使用FILE_DATASTORE类型的数据存储区偏好。您作为数据存储首选项在CREATEINDEX的参数子句中指定mydatastore.

创建首选项

若要创建数据存储区,词法分析器、 筛选、 分类、 单词表或存储首选项,您可以使用 CTX_DDL。CREATE_PREFERENCE程序,并指定在这一章中所描述的类型之一。对于某些类型,您还可以设置 CTX_DDL 属性。SET_ATTRIBUTE程序。

索引类型名称您可以使用创建索引偏好的索引对象的类。一种类型,因此,是一个抽象的 ID,而偏好是一个对应于一种类型的实体。许多系统定义的首选项具有相同的名称作为类型 (例如, BASIC_LEXER),但不是能保证准确对应 (例如, DEFAULT_DATASTORE偏好使用DIRECT_DATASTORE类型,和没有对应的CHARSET_FILTER类型的系统偏好)。要小心在假设的存在或性质的索引类型或系统首选项。

您指定索引首选项与CREATE INDEXALTER INDEX索引首选项决定如何创建您的索引。例如,词法分析器首选项指示要编入索引的文本的语言。您可以创建并指定您自己 (用户定义) 的偏好或您可以使用系统定义的首选项。

若要创建非索引字表,请使用 CTX_DDL。CREATE_STOPLIST您可以添加非索引字表与CTX_DDL.ADD_STOPWORD.

若要创建分区组,请使用 CTX_DDL。CREATE_SECTION_GROUP ,并指定一个节组类型。你可以添加与CTX_DDL. ADD_ZONE_SECTIONCTX_DDL.ADD_FIELD_SECTION.

数据存储类型

使用数据存储类型来指定如何存储您的文本。若要创建数据存储首选项,必须使用下面的数据存储类型之一:

表 2-1 数据存储类型

数据存储类型何时使用
DIRECT_DATASTORE 数据存储在文本列的内部。每一行作为一个单独的文档编制索引。
MULTI_COLUMN_DATASTORE 在多个列中的文本表中存储数据。列连接起来以创建一个虚拟的文档,另一个用于每个行。
DETAIL_DATASTORE 数据存储在文本列的内部。文档包含存储在细节表中的文本列中含有标题信息存储在主表中的一个或多个行。
FILE_DATASTORE 数据从外部存储在操作系统的文件。文件名存储在文本列中,另一个用于每个行中。
NESTED_DATASTORE 嵌套表中存储数据。
URL_DATASTORE 数据从外部存储在位于 intranet 或 Internet 上的文件中。统一资源定位器 (Url) 存储在文本栏中。
USER_DATASTORE 在索引时合成了文件,由用户定义的存储过程。

DIRECT_DATASTORE

DIRECT_DATASTORE型用于直接在文本列中,为每个行的一份文件中存储的文本。DIRECT_DATASTORE不具有属性。

支持以下的列类型:CHARVARCHARVARCHAR2BLOBCLOBBFILEXMLType.

注:

如果你的专栏, BFILE索引所有者必须有读取权限上使用的BFILEs的所有目录.

DIRECT_DATASTORE CLOB 示例

下面的示例创建一个表,用来存储文本数据的 CLOB 列。然后填充两行文本数据索引所使用的系统定义的偏好CTXSYS.DEFAULT_DATASTORE.

create table mytable(id number primary key, docs clob); 

insert into mytable values(111555,'this text will be indexed');
insert into mytable values(111556,'this is a direct_datastore example');
commit;

create index myindex on mytable(docs) 
  indextype is ctxsys.context 
  parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

MULTI_COLUMN_DATASTORE

在你的文本存储在多个列中时,请使用此数据存储区。索引,期间系统连接列的文本,添加标签的文本列和索引作为单个文档的文本。类似 XML 的标记是可选的。您还可以设置系统筛选并串联的二进制列。

MULTI_COLUMN_DATASTORE具有下列属性:

表 2-2 MULTI_COLUMN_DATASTORE 属性

属性属性值
指定要在索引过程中连接的列的逗号分隔列表。您还可以指定允许对基础表的 select 语句列列表的任何表达式。这包括表达式、 PL/SQL 函数、 列别名等等。

支持NUMBERDATE的列类型。他们是在编制索引使用的默认格式掩码之前转换为文本。TO_CHAR功能可以使用列的列表中进行格式设置。

RAWBLOB列直接串联起来作为二进制数据。

不支持LONGLONGRAWNCHARNCLOB,嵌套的表的列和收藏。

列列表仅限于 500 字节的空间。

筛选器 指定 Y/N 标志的逗号分隔的列表。每个标志对应于列列表中的列,并且表示是否要筛选的列使用AUTO_FILTER.

指定允许下列值之一:

Y: 列是用AUTO_FILTER筛选

N 或没有价值: 列,这样做并不是筛选 (默认值)

分隔符 指定的分隔符分隔列文本。使用下列操作之一:

COLUMN_NAME_TAG: 列文本出发由类似 XML 的打开和关闭标记 (默认行为)。

换行符: 列文本是用换行符分隔。

索引和 DML

要索引,必须创建要在CREATE INDEX语句中指定的虚拟列。除非在列属性指定它的名称,此列内容不是虚拟文档的一部分。

该指数被同步仅当更新虚拟列。您可以创建触发器传播更改,如果需要的话。

MULTI_COLUMN_DATASTORE 示例

下面的示例创建称为 my_multi与三个文本列多列数据存储首选项:

begin
ctx_ddl.create_preference('my_multi', 'MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('my_multi', 'columns', 'column1, column2, column3');
end;

MULTI_COLUMN_DATASTORE 筛选器示例

下面的示例创建多列数据存储首选项,并表示bar列是要筛选与 AUTO_FILTER。

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar');
ctx_ddl.set_attribute('MY_MULTI','FILTER','N,Y');

多列数据存储区读取foo bar列,筛选器bar的内容然后组成复合文档:

<FOO>
foo contents
</FOO>
<BAR>
bar filtered contents (probably originally HTML)
</BAR>

不需要指定 N,并不需要为每一列的标志。Y 只需要指定,请用逗号来表示它们适用于哪些列。举个例子:

ctx_ddl.create_preference('MY_MULTI','MULTI_COLUMN_DATASTORE');
ctx_ddl.set_attribute('MY_MULTI', 'COLUMNS','foo,bar,zoo,jar');
ctx_ddl.set_attribute('MY_MULTI','FILTER',',,Y');

这个过滤器只列zoo.

标记行为

索引,过程中,系统将创建为每个行的虚拟文档。虚拟文档被由串联的上市顺序自动添加的列名称标签的列中的内容。举个例子:

create table mc(id number primary key, name varchar2(10), address varchar2(80));
insert into mc values(1, 'John Smith', '123 Main Street');

exec ctx_ddl.create_preference('mymds', 'MULTI_COLUMN_DATASTORE');
exec ctx_ddl.set_attibute('mymds', 'columns', 'name, address');

这就产生了以下虚拟文本索引:

<NAME>
John Smith
</NAME>
<ADDRESS>
123 Main Street
</ADDRESS>

该系统索引标记,忽略自己的标记之间的文本。

作为部分的索引列

索引作为部分这些标记,您可以选择创建字段部分与BASIC_SECTION_GROUP.

注:

使用MULTI_COLUMN_DATASTORE时,将创建没有节组。若要创建这些标记的部分,必须创建一个节组。

当你使用表达式或函数时,该标记被由表达式前 30 个字符除非使用了一个列别名。

例如,如果您的表达式是作为如下:

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17');

然后它产生以下虚拟文本:

<4 + 17>
21
</4 + 17>

如果您的表达式,如下所示:

exec ctx_ddl.set_attibute('mymds', 'columns', '4 + 17 col1');

然后它产生以下虚拟文本:

<col1>
21
<col1>

标记是以大写形式,除非列名或列别名以小写,而双引号包围。举个例子:

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo');

产生以下虚拟文本:

<FOO>
content of foo
</FOO>

为小写字母的标记,使用以下方法:

exec ctx_ddl.set_attibute('mymds', 'COLUMNS', 'foo "foo"');

此表达式将生成:

<foo>
content of foo
</foo>

DETAIL_DATASTORE

对直接存储在数据库中表的详细信息表,位于该主表的索引的文本列的文字使用DETAIL_DATASTORE类型。

DETAIL_DATASTORE具有下列属性:

表 2-3 DETAIL_DATASTORE 属性

属性属性值
二进制文件 指定要添加不换行字符后每个详细信息行的 Oracle 文本的真实。

指定要添加一个换行符 ( ) 的 Oracle 文本为 FALSE 后每个详细信息行自动。

detail_table 指定的名称的详细信息表 (所有者。表如有必要)
detail_key 指定详细信息表的外键列的名称
detail_lineno 指定详细信息表顺序列的名称。
detail_text 指定详细信息表的文本列的名称。

同步主/详细信息索引

详细信息表的更改不会触发重新索引索引进行同步时。只更改主表触发器中的索引列重新索引同步索引时。

您可以在将更改传播到主表行中的索引的列的详细信息表上创建触发器。

示例主/详细信息表

此示例阐释了主页和详细的表如何彼此相关。

主表的示例

主表中的主/详细信息关系定义的文档。您分配的每个文档的识别号码。下表是示例的主表,称为my_master:

列名称列类型描述
article_id 数量 文档 ID,唯一的每个文档 (主键)
作者 VARCHAR2(30) 文档的作者
标题 VARCHAR2(50) 文档的标题
身体 CHAR (1) 要指定在创建索引中的虚拟列

注:

你主表必须包含一个主键列,当您使用DETAIL_DATASTORE类型。
详细信息表的示例

详细信息表包含一个文档,其内容通常存储跨多行的文本。以下详细表my_detail与主表my_master article_id柱有关。此列标识的每个详细信息行 (子文件) 所属的主控文档。

列名称列类型描述
article_id 数量 涉及到主表的文档 ID
seq 数量 由 article_id 定义的主文档中文档的顺序
文本 VARCHAR2 文档文本
详细信息表的示例属性

在此示例中, DETAIL_DATASTORE属性具有以下值:

属性属性值
二进制文件 真实
detail_table my_detail
detail_key article_id
detail_lineno seq
detail_text 文本

您使用 CTX_DDL。CREATE_PREFERENCE使用DETAIL_DATASTORE创建的偏好。您使用 CTX_DDL。SET_ATTRIBUTE要设置此首选项的属性,如前面所述。下面的示例演示如何做到这一点:

begin
ctx_ddl.create_preference('my_detail_pref', 'DETAIL_DATASTORE');
ctx_ddl.set_attribute('my_detail_pref', 'binary', 'true');
ctx_ddl.set_attribute('my_detail_pref', 'detail_table', 'my_detail');
ctx_ddl.set_attribute('my_detail_pref', 'detail_key', 'article_id');
ctx_ddl.set_attribute('my_detail_pref', 'detail_lineno', 'seq');
ctx_ddl.set_attribute('my_detail_pref', 'detail_text', 'text');
end;
主/详细信息索引示例

到索引这个主/详细信息关系中定义的文档CREATEINDEX的主表中指定的列。您指定的列必须允许的类型之一。

此示例使用body列,其功能是能够创建主/详细信息索引,并提高代码的可读性。my_detail_pref首选项被设置为DETAIL_DATASTORE ,具有所需属性:

CREATE INDEX myindex on my_master(body) indextype is ctxsys.context
parameters('datastore my_detail_pref');

在此示例中,您还可以指定要创建索引的titleauthor的列。然而,如果您这样做,这些列的更改将触发重新索引的操作。

FILE_DATASTORE

FILE_DATASTORE型用于存储在通过本地文件系统访问的文件中的文本。

注:

与某些类型的远程挂载的文件系统, FILE_DATASTORE可能无法工作。

FILE_DATASTORE具有以下属性:

表 2-4 FILE_DATASTORE 属性

属性属性值
路径 path1:path2:pathn
路径

指定外部存储在文件系统中的文件的完整目录路径名称。当您指定完整的目录路径,这样时,您只需要在文本列中包括文件的名称。

您可以指定多个路径,路径与在 UNIX 和 Windows 上的 semicolon(;) 由一个冒号 (:) 分隔每个路径。文件的名称存储在文字的表格中的文本列中。

如果您不使用此属性指定外部文件的路径,Oracle 文本需要在文本列中存储的文件名称中包含的路径。

路径属性限制

路径属性具有下列局限性:

  • 如果您指定一个路径属性,您只能在索引列中使用一个简单的文件名。你不能将路径属性结合路径作为文件名的一部分。如果在多个文件夹或目录中存在这些文件,你必须离开路径属性的设置,并在索引列中包含文件的完整名称,路径。

  • 在 Windows 系统上,文件必须位于本地驱动器上。他们不能在远程驱动器上,是否远程驱动器映射为本地驱动器盘符。

FILE_DATASTORE 示例

本示例创建称为COMMON_DIR具有/mydocs路径文件数据存储首选项:

begin
 ctx_ddl.create_preference('COMMON_DIR','FILE_DATASTORE');
 ctx_ddl.set_attribute('COMMON_DIR','PATH','/mydocs');
end;

当您使用填充表mytable时,您只需要插入文件名。路径属性告诉系统哪里看在索引操作期间。

create table mytable(id number primary key, docs varchar2(2000)); 
insert into mytable values(111555,'first.txt');
insert into mytable values(111556,'second.txt');
commit;

创建索引,如下所示:

create index myindex on mytable(docs)
  indextype is ctxsys.context
  parameters ('datastore COMMON_DIR'); 

URL_DATASTORE

URL_DATASTORE型用于存储文本:

  • 万维网 (通过 HTTP 或 FTP 访问) 上的文件中

  • 在本地文件系统 (通过文件协议访问) 中的文件

你在单个文本字段中存储的每个 URL。

URL 语法

您在文本字段中存储的 url 语法是,如下所示 (用方括号表示可选参数):

[URL:]<access_scheme>://<host_name>[:<port_number>]/[<url_path>]

您指定的access_scheme字符串可以是ftp、 http或文件。举个例子:

http://mymachine.us.oracle.com/home.html

由于这种语法是部分符合 RFC 1738 规范,以下限制适用于 URL 语法:

  • 该 URL 必须包含仅可打印的 ASCII 字符。非打印 ASCII 字符和多字节字符必须使用进行转义 %xx表示法,其中xx是特殊字符的十六进制表示形式。

    注:

    在 URL 中的login:password@语法是仅支持 ftp 访问方案。

URL_DATASTORE 属性

URL_DATASTORE具有下列属性:

表 2-5 URL_DATASTORE 属性

属性属性值
超时 以秒为单位指定超时值。有效的范围是 15 至 3600 秒。默认值为 30。
maxthreads 指定可以同时运行的线程的最大数目。使用 1and 介于 1024年。默认值为 8。
urlsize 指定的 URL 字符串的最大长度,以字节为单位.使用32 到 65535 之间的数字。默认值为 256。
maxurls 指定 URL 缓冲区的最大大小。使用 32 到 65535 之间的数字。默认值为 256。
maxdocsize 指定最大文件大小。使用 256 和 2147483647 字节 (2 千兆字节) 之间的一个数字。默认值是 2,000,000。
从不 指定的 http 代理服务器的主机名。(可选) 在窗体hostname:port中指定端口号,用冒号.
ftp_proxy 指定 ftp 代理服务器的主机名。(可选) 在窗体hostname:port中指定端口号,用冒号.
no_proxy 没有代理服务器指定的域。使用逗号分隔的达 16 域名的字符串。
超时

指定以秒为单位,如连接或读取网络操作在超时并返回到应用程序的超时错误之前等待时间的长度。超时的有效范围是 15 到 3600,默认值为 30。

注:

由于超时处于网络操作水平,总超时可能长于指定超时的时间.
maxthreads

指定可以同时运行的线程的最大数目。Maxthreads的有效范围是 1 到 1024年,默认值为 8。

urlsize

指定最大长度以字节为单位,URL 数据存储区支持的 Url 存储在数据库中。如果 URL 超过最大长度,则返回错误。Urlsize的有效范围是 32 到 65535,默认值为 256。

注:

指定为 maxurls 和urlsize的产品值不能超过 5,000,000。

换句话说,内存缓冲区的最大大小 (maxurls * urlsize) 为该 URL 是大约 5 兆字节。

maxurls

指定内部的缓冲区可保存为 HTML 文档 (行) 从文本表中检索到的行的最大数目。Maxurls的有效范围是 32 到 65535,默认值为 256。

注:

指定为maxurls和urlsize的产品值不能超过 5,000,000。

换句话说,内存缓冲区的最大大小 (maxurls * urlsize) 为该 URL 是大约 5 兆字节。

从不

指定用作安装了 Oracle 文本的计算机的 HTTP 代理 (网关) 的主机的完全限定的名称。您可以选择指定端口号,用冒号的形式hostname:port.

如果这台机器是在需要通过代理服务器访问位于防火墙外部的 Web 文件的身份验证的 intranet,则必须设置此属性。

ftp_proxy

指定用作安装了 Oracle 文本的计算机的 FTP 代理 (网关) 的主机的完全限定名称。您可以选择指定一个端口号,用冒号的形式hostname:port.

如果这台机器是在需要通过代理服务器访问位于防火墙外部的 Web 文件的身份验证的 intranet,必须设置此属性。

no_proxy

在 intranet 中指定的域 (达十六,单独用逗号) 存在于大多数,如果不是全部,机器的字符串。当其中一个域中的主机名称遇到时,没有请求发送到ftp_proxy和从不为指定的计算机。相反,直接由主机标识在 URL 中,处理了该请求。

例如,如果为no_proxy输入字符串us.oracle.com, uk.oracle.com ,则包含这些域中的主机名的机器的任何 URL 请求不会处理由您的代理服务器。

URL_DATASTORE 示例

本示例创建称为URL_PREF的从不,no_proxy 和超时属性设置URL_DATASTORE偏好。对于未设置的属性,则使用缺省值。

begin
 ctx_ddl.create_preference('URL_PREF','URL_DATASTORE');
 ctx_ddl.set_attribute('URL_PREF','HTTP_PROXY','www-proxy.us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','NO_PROXY','us.oracle.com');
 ctx_ddl.set_attribute('URL_PREF','Timeout','300');
end;

创建表并将值插入到它:

create table urls(id number primary key, docs varchar2(2000));
insert into urls values(111555,'http://context.us.oracle.com');
insert into urls values(111556,'http://www.sun.com');
commit;
 

若要创建索引,请指定 URL_PREF 作为数据存储区:

create index datastores_text on urls ( docs ) 
  indextype is ctxsys.context 
  parameters ( 'Datastore URL_PREF' ); 

USER_DATASTORE

使用USER_DATASTORE类型来定义索引过程中合成文件的存储的过程。例如,一个用户程序可能合成作者、 日期和文本列到一个文档中,有的作者和日期的信息索引文本的一部分。

USER_DATASTORE具有下列属性:

表 2-6 USER_DATASTORE 属性

属性属性值
程序 指定合成要编制索引的文档的过程。

此过程可以由任何用户拥有,并且必须是可由索引所有者执行。

先前 指定程序的第二个参数的数据类型。有效值为CLOB BLOBCLOB_LOCBLOB_LOCVARCHAR2默认值为 CLOB。

当您指定CLOB_LOCBLOB_LOC,您指示没有临时CLOBBLOB需要,因为程序IN复制定位器 /OUT第二个参数。

程序

指定合成要编制索引的文档的程序的名称。本规格书必须在窗体中,PROCEDURENAME 或软件包名称。PROCEDURENAME。您还可以指定架构所有者名称。

您指定的程序必须具有两个参数定义如下:

procedure (r IN ROWID, c IN OUT NOCOPY <output_type>)

第一个参数r必须是类型ROWID第二个参数c必须是类型output_type。NOCOPY是指示 Oracle 文本,如果有可能通过引用传递参数 c 的编译器提示。

注::

过程的名称和它的参数可以被命名为任何名称。为简单起见此示例中使用的参数 r 和 c。

存储的过程是索引的每一行调用一次。鉴于当前行的 rowid,程序必须编写文档的文本变成第二个参数,您先前使用指定的类型.

约束

以下限制适用于程序:

  • 程序可以由任何用户,但用户必须具有正确执行程序的数据库权限

  • 程序必须是可执行的索引所有者

  • 程序必须不发出像COMMIT的 DDL 或交易控制语句

索引之后编辑程序

如果您更改或编辑存储的过程,在此基础上的索引不会向外通知,您必须手动重新创建此类的索引。因此,如果该存储过程使用的其它列,这些列的值更改,不会重新生成索引的行。仅当索引的列更改时重新编制索引行。

先前

指定程序的第二个参数的数据类型。您可以使用CLOBBLOBCLOB_LOCBLOB_LOCVARCHAR2.

CLOB 例 USER_DATASTORE

作者、 标题和文本字段分开,如articles表定义如下所示的表,请考虑:

create table articles( 
    id       number, 
    author   varchar2(80), 
    title    varchar2(120), 
    text     clob );

作者和标题的字段是要索引的文档文本的一部分。假定用户appowner写道合成一个文件从文本、 作者和标题字段的用户数据存储接口的存储的过程:

create procedure myproc(rid in rowid, tlob in out clob nocopy) is 
  begin 
      for c1 in (select author, title, text from articles 
                  where rowid = rid) 
      loop 
dbms_lob.writeappend(tlob, length(c1.title), c1.title);
   dbms_lob.writeappend(tlob, length(c1.author), c1.author);
   dbms_lob.writeappend(tlob, length(c1.text), c1.text);
end loop; 
    end; 
 

此过程接受 rowid 和临时的CLOB定位器,并串联成临时CLOB的这篇文章的所有列。For 循环执行只有一次。

用户appowner创建首选项,如下所示:

begin
ctx_ddl.create_preference('myud', 'user_datastore'); 
ctx_ddl.set_attribute('myud', 'procedure', 'myproc'); 
ctx_ddl.set_attribute('myud', 'output_type', 'CLOB'); 
end;

appownerarticles(text)使用这种偏好上创建索引时,索引操作看到作者和标题文档文本中。

USER_DATASTORE 与 BLOB_LOC 的示例

下面的过程可能会用OUTPUT_TYPE BLOB_LOC:

procedure myds(rid in rowid, dataout in out nocopy blob)
is
  l_dtype varchar2(10);
  l_pk    number;
begin
  select dtype, pk into l_dtype, l_pk from mytable where rowid = rid;
  if (l_dtype = 'MOVIE') then
    select movie_data into dataout from movietab where fk = l_pk;
  elsif (l_dtype = 'SOUND') then
    select sound_data into dataout from soundtab where fk = l_pk;
  end if;
end;

用户appowner创建首选项,如下所示:

begin
ctx_ddl.create_preference('myud', 'user_datastore'); 
ctx_ddl.set_attribute('myud', 'procedure', 'myproc'); 
ctx_ddl.set_attribute('myud', 'output_type', 'blob_loc'); 
end;

NESTED_DATASTORE

使用嵌套数据存储类型存储为嵌套表中的行的索引文档。

表 2-7 NESTED_DATASTORE 属性

属性属性值
nested_column 指定嵌套的表的列的名称。此属性是必需的。仅指定的列名称。请指定架构所有者或包含的表名称。
nested_type 指定嵌套表的类型。此属性是必需的。您必须提供所有者的名称和类型。
nested_lineno 在命令行的嵌套表中指定的属性名称。这就像 DETAIL_LINENO 在详细数据存储区中。此属性是必需的。
nested_text 在嵌套的表类型,它包含的文本行中指定的列的名称。这就像 DETAIL_TEXT 在详细数据存储区中。此属性是必需的。不支持长列类型,作为嵌套的表中的文本列。
二进制文件 指定 FALSE,Oracle 文本时合成文档文本自动插入一个换行符。如果指定 TRUE,Oracle 文本做这。此属性不是必需的。默认值为 FALSE。

当使用嵌套的表数据存储区时,你必须虚拟栏编制索引,因为可扩展索引框架不允许索引嵌套的表的列。请参阅示例。

嵌套表的 DML 不会自动传播到用于索引的虚拟列。DML 嵌套表上,将其传播到虚拟列,为您的应用程序代码或触发器必须显式更新虚拟列。

筛选器索引的默认值基于nested_text列的类型。

在验证期间,该类型存在的甲骨文文字检查和属性您指定为 nested_lineno 和 nested_text 中的嵌套的表类型存在。Oracle 文本不检查命名的嵌套的表的列索引表中存在。

NESTED_DATASTORE 示例

本节演示使用索引的文档存储为嵌套表中的行的NESTED_DATASTORE类型的示例。

创建嵌套的表

下面的代码创建一个嵌套的表和嵌套表存储表 mytab:

create type nt_rec as object (
  lno number, -- line number
  ltxt varchar2(80) -- text of line
);

create type nt_tab as table of nt_rec;
create table mytab (
   id number primary key, -- primary key
   dummy char(1), -- dummy column for indexing
   doc nt_tab -- nested table
)
nested table doc store as myntab;

将值插入到嵌套表

下面的代码将值插入到具有 id 等于 1 的父行的嵌套表。

insert into mytab values (1, null, nt_tab());
insert into table(select doc from mytab where id=1) values (1, 'the dog');
insert into table(select doc from mytab where id=1) values (2, 'sat on mat ');
commit;
创建嵌套的表格首选项

下面的代码设置的首选项和属性为NESTED_DATASTORE根据定义的嵌套的表类型nt_tab和父表mytab:

begin
-- create nested datastore pref
ctx_ddl.create_preference('ntds','nested_datastore'); 

-- nest tab column in main table
ctx_ddl.set_attribute('ntds','nested_column', 'doc'); 

-- nested table type
ctx_ddl.set_attribute('ntds','nested_type', 'scott.nt_tab');

-- lineno column in nested table
ctx_ddl.set_attribute('ntds','nested_lineno','lno');

--text column in nested table
ctx_ddl.set_attribute('ntds','nested_text', 'ltxt');
end;
嵌套表上创建索引

下面的代码创建使用嵌套的表数据存储的索引:

create index myidx on mytab(dummy) -- index dummy column, not nest table
indextype is ctxsys.context parameters ('datastore ntds');
查询嵌套数据存储区

下面的 select 语句查询建立从嵌套的表的索引:

select * from mytab where contains(dummy, 'dog and mat')>0;
-- returns document 1, since it has dog in line 1 and mat in line 2.

筛选器类型

使用筛选器类型来创建确定文本索引的筛选方式的首选项。筛选器允许字处理和格式化的文档,以及纯文本、 HTML 和 XML 文档进行索引。

对于已格式化的文档,Oracle 文本以本机格式存储文档和使用筛选器来建立临时的纯文本或 HTML 版本的文档。Oracle 文本索引词来自纯文本或 HTML 格式的文档版本。

若要创建筛选器首选项,必须使用以下类型之一:

表 2-8 筛选器类型

筛选器当使用
CHARSET_FILTER 字符集转换筛选器
AUTO_FILTER 汽车滤清器过滤格式化的文件,
NULL_FILTER 无过滤所需。用于索引的纯文本、 HTML 或 XML 文档
MAIL_FILTER 使用MAIL_FILTER来转换 RFC 822,RFC 2045 消息中对可转位刀片的文本。
USER_FILTER 用户定义的外部滤波器用于自定义筛选
PROCEDURE_FILTER 用户定义的存储过程筛选器,用于自定义筛选。

CHARSET_FILTER

使用CHARSET_FILTER从字符集到字符集数据库所用的非数据库字符集转换文件。

CHARSET_FILTER具有以下属性:

表 2-9 CHARSET_FILTER 属性

属性属性值
字符集 指定源字符集的全球化支持名称。

如果您指定 UTF16AUTO,此筛选器自动检测如果字符集是 UTF16 大-或小端字节序。

为日语字符设置自动检测指定 JAAUTO。此筛选器自动检测中 JA16EUC 或 JA16SJIS 的自定义字符规格,并将转换为数据库字符集。此筛选器是有用在日语中,在您的数据文件具有混合字符集。

请参见:

有关受支持的全球化支持字符集的详细信息oracle 数据库全球化支持指南设置。

UTF 16 大-和小端字节序检测

如果你的字符集是 UTF-16,则可以指定 UTF16AUTO 自动检测大或小字节数据。甲骨文文字这样通过检查文档行的第一次的两个字节。

如果前两个字节是 0xFE,0xFF,文档公认的小端字节序,减去那些两个字节的文档的其余部分通过索引。

如果前两个字节 0xFF,0xFE,文档公认的大端字节序,减去那些两个字节的文档的其余部分通过索引。

如果前两个字节是什么,该文档被假定为大端字节序和整篇文档,包括前两个字节代代相传的索引。

索引混合字符设置列

混合的字符设置的列是一种存储不同字符集的文档。例如,文本表可能以 utf8 表示,将某些文档存储在 WE8ISO8859P1 和其他人。

要索引的表中不同字符集的文档,必须与字符设置列创建你的基表。在本专栏中,可以指定文档字符集在每行的基础上。要编制索引的文档,Oracle 文本转换数据库字符集的文档。

字符集与CHARSET_FILTER的改建工程。当字符集列中为NULL或不承认时,Oracle 文本假定源字符集是charset属性中指定。

注:

字符集转换也与AUTO_FILTER的作品当文件格式列设置为TEXT.
索引混合字符设置示例

例如,与字符集列创建表:

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     cset varchar2(20),
     text varchar2(80)
);

创建该筛选器首选项:

begin
cxt_ddl.create.preference('cs_filter', 'CHARSET_FILTER');
ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');end

插入纯文本文档和命名的字符集:

insert into hdocs values(1, 'text', 'WE8ISO8859P1', '/docs/iso.txt');
insert into hdocs values (2, 'text', 'UTF8', '/docs/utf8.txt');
commit;

字符集列创建索引和名称:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter cs_filter 
  format column fmt
  charset column cset');

AUTO_FILTER

AUTO_FILTER是一个通用的过滤器,过滤器大多数文件格式,包括 PDF 和 Microsoft Word ™ 文件。将它用于单格式和混合格式的列进行索引。此筛选器自动绕过纯文本、 HTML、 XHTML、 SGML 和 XML 文件。

请参见:

AUTO_FILTER和学会更多关于如何设置您的环境使用此筛选器支持的格式的列表,请参阅附录 B,"Oracle 文本支持文档格式".

注:

AUTO_FILTER替换INSO_FILTER,其中已弃用。虽然已尽一切努力确保最大的向后兼容性之间两个筛选器,以便使用INSO_FILTER应用程序将继续工作而无需修改,可能会出现一些差异。用户因此应该在他们新的程序中使用AUTO_FILTER和在可能的情况下,替换实例的INSO_FILTER,和任何优惠制度或常数,使在旧的应用程序中使用它。

AUTO_FILTER偏好具有下列属性:

表 2-10 AUTO_FILTER 属性

属性属性值
超时 以秒为单位指定AUTO_FILTER超时。使用 0 到 42,949,672 之间的数字。默认值是 120。设置此值 0 禁用的功能。

这等待期如何使用的方法取决于您如何设置 timeout_type。

此功能被禁用,相应的字符集和格式列导致AUTO_FILTER绕行,例如当格式标记TEXT的行.

使用此功能来防止甲骨文文本索引从悬挂无限期地等待操作筛选器操作。

timeout_type 指定的启发式算法或固定。默认值为启发式算法。

指定 Oracle 文本,以检查每个超时秒是否从外面在 HTML 导出输出增加了启发式算法。如果输出并没有增加,操作将终止该文档。CTX_USER_INDEX_ERRORS视图中记录的错误和 Oracle 文本移动到下一文档的行索引。

指定固定终止外面在 HTML 出口加工后不论是西耶是否只挂过滤的超时秒数。当索引吞吐量比抽出时间来成功地筛选大型文档更重要时,此值是有用的。

output_formatting 将此属性设置有对筛选器的性能或滤波器的输出没有影响。它被维护向后兼容性。

索引格式文件

若要包含格式化的文件,例如 Microsoft Word 文本栏编制索引,请使用AUTO_FILTER此筛选器将自动检测文档格式。您可以使用 CTXSYSAUTO_FILTER的系统定义的偏好在参数子句中,如下所示:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter ctxsys.auto_filter');

注:

CTXSYS.AUTO_FILTER替换 CTXSYS.INSO_FILTER,其中已弃用。程序利用CTXSYS.INSO_FILTER应该仍然工作。新的程序应该使用 CTXSYS.AUTO_FILTER.

显式地绕过纯文本或 HTML 混合的格式列中

混合格式列是包含多个文档的格式,如一列包含 Microsoft Word、 PDF、 纯文本和 HTML 文档的文本列。

AUTO_FILTER可以索引列混合格式,自动绕过纯文本、 HTML 和 XML 文档。然而,如果您不想依赖于内置旁路机制,您可以显式您行标记为文本并导致AUTO_FILTER来忽略行并且不处理任何方式中的文档。

基表中的格式列使您能够指定的文本列中所包含的文档的类型。您可以指定以下文件类型:TEXTBINARYIGNORE在索引,期间AUTO_FILTER忽略键入的TEXT,假定字符集列未指定任何文件。(带有TEXT格式列类型的文档和一个与IGNORE类型之间的区别是TEXT文档编制索引,但而 IGNORE文档根本未编制索引,该筛选器将忽略。使用IGNORE忽略文件,例如图像文件或在一种语言,你不想要索引的文档。IGNORE可以使用与任何筛选器类型。

若要设置AUTO_FILTER旁路机制,必须在您的基表创建格式列。

举个例子:

create table hdocs (
     id number primary key,
     fmt varchar2(10),
     text varchar2(80)
);

你假设你索引大多是 Word 文档,指定BINARY格式列筛选 Word 文档中。或者,为了AUTO_FILTER忽略 HTML 文档,请在格式列中指定TEXT

例如,下面的语句将两个文档添加到文字的表格,将一种格式指派为BINARY和其他TEXT:

insert into hdocs values(1, 'binary', '/docs/myword.doc');
insert in hdocs values (2, 'text', '/docs/index.html');
commit;

若要创建索引,使用CREATEINDEX并在参数字符串中指定的格式列名称:

create index hdocsx on hdocs(text) indextype is ctxsys.context
  parameters ('datastore ctxsys.file_datastore 
  filter ctxsys.auto_filter 
  format column fmt');

如果您不指定TEXTBINARY格式列,则使用BINARY

注:

您无需指定格式列CREATEINDEX时使用AUTO_FILTER.

字符集转换与 AUTO_FILTER

AUTO_FILTER将文档转换为数据库字符集时文件格式列设置为TEXT在这种情况下, AUTO_FILTER看字符集列来确定文档字符集。

如果字符集列的值不是甲骨文文字字符集名称,该文档被通过没有任何字符集转换。

注:

在使用AUTO_FILTER时,您无需指定字符集列.

如果你做指定的字符集列,不指定格式列AUTO_FILTER作品喜欢CHARSET_FILTER,只是在这种情况下有没有日本字符集自动检测。

请参见:

"CHARSET_FILTER".

NULL_FILTER

使用纯文本或 HTML 时要编制索引的NULL_FILTER类型和没有筛选的需要来进行。NULL_FILTER不具有属性。

HTML 文档编制索引

如果您的文档集完全是 HTML,Oracle 建议您在您的筛选器首选项中使用 NULL_FILTER

例如,要索引 HTML 文档集,可以如下指定为NULL_FILTERHTML_SECTION_GROUP的系统定义的首选项:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
  parameters('filter ctxsys.null_filter
  section group ctxsys.html_section_group');

请参见:

节组的索引的 HTML 文档的详细信息,请参阅"一节组类型".

MAIL_FILTER

使用MAIL_FILTER来转换 RFC 822,RFC 2045 消息中对可转位刀片的文本。以下限制持有为输入:

  • 文档必须是 US-ASCII

  • 行不能超过 1024 个字节

  • 文档必须是在 RFC 822 语法无效。

如果输入无效的行为是未定义的。由无错误过滤器,可能强劲处理存在一定的偏差。其他人可能会导致读取时间或过滤时间的错误。

MAIL_FILTER具有下列属性:

表 2-11 MAIL_FILTER 属性

属性属性值
INDEX_FIELDS 指定以冒号分隔的要保留在输出中的字段列表。这些字段转换为标记的标记。例如,如果将INDEX_FIELDS设置为"FROM":

From: Scott Tiger

成为:

<FROM>Scott Tiger</FROM>

只有顶级字段将转换以这种方式。

AUTO_FILTER_TIMEOUT 指定 AUTO_FILTER筛选通过邮件过滤器调用的超时值。默认值为 60。(替换INSO_TIMEOUT属性和INSO_TIMEOUT的向后兼容.)
AUTO_FILTER_OUTPUT_FORMATTING 指定或TRUEFALSE默认值是TRUE.

此属性将替换以前的INSO_OUTPUT_FORMATTING属性。然而,它在当前版本中没有任何影响。

PART_FIELD_STYLE 指定应如何转换发生在较低级别的部件和INDEX_FIELDS特性所标识的字段。顶级的消息部分由INDEX_FIELDS标识的字段总是转换为标记标记 (见INDEX_FIELDS前面的说明) ;PART_FIELD_STYLE控制后续部分 ; 转的型例如,附加的电子邮件。

可能的值包括IGNORE(默认值),其中一部分字段并不包括在索引 ;TAG,标记,作为与顶层部件领域 ; 发生于转化部分字段名称FIELD,于其中一部分字段名称保存作为字段,不作为标记 ;TEXT,其中部分字段名称都取消了,而只有字段内容保存为索引。PART_FIELD_STYLE是如何工作的示例,请参阅"Mail_Filter 示例"

筛选器的行为

此筛选器执行以下操作为每个文档:

  • 读取和删除页眉字段

  • 解码的消息正文,如果需要,根据内容传输编码字段

  • 采取行动取决于内容类型字段值和邮件筛选器配置文件中指定的用户指定的行为。(请参阅"关于邮件筛选器的配置文件")。可能采取的行动是:

    • 生产输出文本 (INCLUDE) 体内。如果在包括部分在内容类型标头字段遇到没有字符集,则 Oracle 默认为您在特性中指定的值将列设置在基表中。你的名字你填充的字符设置的列在创建索引命令的参数字符串。

    • AUTO_FILTER正文内容 (AUTO_FILTER指令)。

    • 从输出文本 (IGNORE删除正文内容)

  • 如果未指定行为的配置文件中的类型,默认值如下:

    • 文本 / *: 产生输出文本的身体

    • 应用程序 / *: AUTO_FILTER正文内容

    • 图像 / *、 音频 / *、 视频 / *、 模型 / *: 忽略

  • 将分析多部分邮件,邮件过滤器应用以递归方式对每个部分。每个部分追加到输出。

  • 所有文本制作将字符集转换为数据库字符集中,如果需要的话。

关于邮件筛选器配置文件

MAIL_FILTER筛选器使用的邮件筛选器的配置文件,其中包含指令指定一个邮件文档的筛选方式。邮件筛选器的配置文件是一个可编辑的文本文件。在这里可以为每个内容类型来重写默认行为。配置文件还包含 IANA Oracle 全球化支持字符设置的名称映射。

文件的位置必须在ORACLE_HOME/ctx/config。新的系统参数中存储要使用的文件的名称 MAIL_FILTER_CONFIG_FILE在安装,这是设置为 drmailfl.txt,具有有用的默认值的内容。

Oracle 建议您创建您自己的邮件筛选器配置文件以避免覆盖新的版本或修补程序集的安装。邮件筛选器配置文件应该在数据库字符集设置。

邮件文件的配置文件结构

该文件有两个部分,行为和数据。你指示开始的行为部分,如下所示:

[behavior]

每个线以下始于一个 mime 类型,然后空白,行为规范。MIME类型可以是完整的TYPE/SUBTYPE或只是TYPE,它将适用于该类型的所有子类型。TYPE/SUBTYPE规格覆盖TYPE的规格,以重写默认行为。行为可以INCLUDEAUTO_FILTERIGNORE(请参阅"筛选器的行为"的定义)。举个例子:

application/zip     IGNORE
application/msword  AUTO_FILTER
model               IGNORE

您不能指定为"多部分"或"邮件"类型的行为。如果你这样做,这种行被忽略。一种类型的重复规范替换较早的规范。

评论可以列入的邮件配置文件的起始行以 # 符号。

字符集映射小节的开头

[charsets]

线包括 IANA 的名字,然后空格,然后一个 Oracle 全球化支持字符集的名称,比如:

US-ASCII     US7ASCI
ISO-8859-1   WE8ISO8859P1

此文件是邮件过滤器获取映射的唯一途径。没有默认值。

当您更改配置文件时,更改将影响仅索引后,点过的文档。您必须在更改该文件后刷新共享的池。

Mail_Filter 示例

假设我们有一个具有以下形式,其他带有不同主题行的电子邮件与我们的电子邮件相连的电子邮件:

To:  somebody@someplace
Subject:  mainheader
Content-Type:  multipart/mixed
. . .
Content-Type: text/plain
X-Ref:  some_value
Subject:  subheader 1
. . .
Content-Type:  text/plain
X-Control:  blah blah blah 
Subject:  subheader 2
. . .

我们设置INDEX_FIELDS是"主体",最初, PART_FIELD_STYLEIGNORE.

CTX_DDL.CREATE_PREFERENCE('my_mail_filt', 'mail_filter');
CTX_DDL_SET_ATTRIBUTE(my_mail_filt', 'INDEX_FILES', 'subject');
CTX_DDL.SET ATTRIBUTE ('my_mail_filt', 'PART_FIELD_STYLE', 'ignore');

现在时创建该索引,将会索引此文件,如下所示:

<SUBJECT>mainheader</SUBJECT>

如果PART_FIELD_STYLE相反设置为TAG,这成为:

<SUBJECT>mainheader</SUBJECT>
<SUBJECT>subheader1</SUBJECT>
<SUBJECT>subheader2</SUBJECT>

如果将PART_FIELD_STYLE设置为FIELD相反,这是的结果:

<SUBJECT>mainheader<SUBJECT>
SUBJECT:subheader1
SUBJECT:subheader2

最后,如果PART_FIELD_STYLE相反设置为TEXT,然后结果是:

<SUBJECT>mainheader</SUBJECT>
subheader1
subheader2

USER_FILTER

使用USER_FILTER类型来指定外部筛选器用于筛选的列中的文档。USER_FILTER具有以下属性:

表 2-12 USER_FILTER 属性

属性属性值
命令 指定的筛选器可执行文件的名称。
命令

指定单一的可执行文件外部筛选器,用于筛选的列中存储的所有文本。如果不止一个文档格式存储在列中,为命令指定的外部筛选器必须认识和处理所有这种格式。

在 UNIX 上,您指定的可执行文件必须存在于$ORACLE_HOME/ctx/bin目录中。在 Windows 上,您指定的可执行文件中的%ORACLE_HOME%/bin目录必须存在。

您必须创建您的用户筛选器可执行文件具有两个参数: 第一个是要读取输入文件的名称和第二个是要写入的输出文件的名称。

如果所有文件格式都支持AUTO_FILTER,而不是USER_FILTER使用 AUTO_FILTER ,除非额外任务除了筛选所需的文件。

用户筛选器示例

下面的示例将用作用户筛选器的 Perl 脚本。此脚本将转换为大写的第一个参数中指定的输入的文字文件,并将输出写入到第二个参数中指定的位置:

#!/usr/local/bin/perl

open(IN, $ARGV[0]);
open(OUT, ">".$ARGV[1]);

while (<IN>)
{
  tr/a-z/A-Z/;
  print OUT;
}

close (IN);
close (OUT);

假设这个文件命名为upcase.pl,请创建筛选器首选项如下:

begin 
  ctx_ddl.create_preference 
    ( 
      preference_name => 'USER_FILTER_PREF', 
      object_name     => 'USER_FILTER' 
    ); 
  ctx_ddl.set_attribute
    ('USER_FILTER_PREF','COMMAND','upcase.pl');
end; 

在 SQL 中创建索引 * 加上,如下所示:

create index user_filter_idx on user_filter ( docs ) 
  indextype is ctxsys.context 
  parameters ('FILTER USER_FILTER_PREF'); 

PROCEDURE_FILTER

使用PROCEDURE_FILTER类型来筛选您的文档的存储过程。每次一个文档需要进行筛选的时被调用存储的过程。

这种类型具有下列属性:

表 2-13 PROCEDURE_FILTER 属性

属性目的允许的值
程序 筛选器名称的存储过程。 任何程序。该过程可以是 PL/SQL 存储过程。
input_type 为存储过程的输入参数的类型。 VARCHAR2, BLOB, CLOB, FILE
先前 输出参数的存储过程的类型。 VARCHAR2, CLOB, FILE
rowid_parameter 包括 rowid 参数吗? TRUE/FALSE
format_parameter 包括格式参数吗? TRUE/FALSE
charset_parameter 包括 charset 参数吗? TRUE/FALSE
程序

指定要用于筛选的存储过程的名称。该过程可以是 PL/SQL 存储过程。该过程可以是一个安全的标注或调用安全的标注。

rowid_parameterformat_parameter charset_parameter设置为 FALSE,该过程可以具有下列签名之一:

PROCEDURE(IN BLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN CLOB, IN OUT NOCOPY CLOB)
PROCEDURE(IN VARCHAR, IN OUT NOCOPY CLOB)
PROCEDURE(IN BLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN CLOB, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN VARCHAR2, IN OUT NOCOPY VARCHAR2)
PROCEDURE(IN BLOB, IN VARCHAR2)
PROCEDURE(IN CLOB, IN VARCHAR2)
PROCEDURE(IN VARCHAR2, IN VARCHAR2)

第一个参数是行的传递数据存储区未过滤的内容。第二个参数是要传递回筛选的文档文本的过程。

程序属性是强制性的并且没有默认值。

input_type

指定的筛选过程的输入参数的类型。您可以指定以下内容之一:

类型描述
程序 筛选器名称的存储过程。
input_type 为存储过程的输入参数的类型。
先前 输出参数的存储过程的类型。
rowid_parameter 包括 rowid 参数吗?

Input_type 属性不是强制性的。如果未指定,BLOB 是默认值。

先前

指定的筛选过程的输出参数的类型。您可以指定下列类型之一:

类型描述
CLOB 输出参数是 NOCOPY CLOB 中出来。你的程序必须写入 CLOB 中通过过滤后的内容。
VARCHAR2 输出参数是在出 NOCOPY VARCHAR2。你的程序必须写 VARCHAR2 变量的筛选的内容传递。
FILE 输出参数必须IN VARCHAR2在进入筛选过程,输出参数是一个临时文件的名称。筛选过程必须写入此命名的文件的已筛选的内容。

只有当该过程是一个安全的标注,可以向文件中写入时,使用文件输出类型很有用。

先前属性不是强制性的。如果未指定, CLOB是默认的。

rowid_ 参数

当指定 TRUE 时,作为第一个参数之前的输入和输出参数, 传递的 rowid 中要被筛选的文档。

例如,随着INPUT_TYPE BLOBOUTPUT_TYPE CLOB,和ROWID_PARAMETER TRUE,筛选过程必须具有签名,如下所示:

procedure(in rowid, in blob, in out nocopy clob)

此属性是有用的当您的程序需要从其他列或表的数据。此属性不是强制性的。默认值为FALSE.

format_parameter

如果指定TRUE,被筛选的文档的格式列的值传递给筛选过程输入和输出参数,但后 rowid 参数,如果启用了。

您指定的格式列的名称在参数字符串中的索引时使用的关键字'format column <columnname>'该参数的类型必须是IN VARCHAR2.

格式列的值可以读取根据 rowid 参数,但此属性使得单个筛选器的工作对多个表的结构,因为格式属性抽象,并不需要的知识的表格或格式的列的名称。

FORMAT_PARAMETER不是强制性的。默认值为FALSE.

charset_parameter

当你指定TRUE时,文档被过滤的字符集列的值传递给筛选过程输入和输出参数,但后的 rowid 和格式的参数,如果启用了。

您指定的字符集列的名称在参数字符串中的索引时使用关键字'charset column <columnname>'该参数的类型必须是IN VARCHAR2.

CHARSET_PARAMETER属性不是强制性的。默认值为 FALSE。

参数顺序

ROWID_PARAMETERFORMAT_PARAMETERCHARSET_PARAMETER是完全独立的。该命令是 rowid,格式,然后字符集,但筛选过程传递只有所需的最小参数。

例如,假定INPUT_TYPEBLOB OUTPUT_TYPECLOB如果您筛选过程需要所有的参数,必须为程序签名:

(id IN ROWID, format IN VARCHAR2, charset IN VARCHAR2, input IN BLOB, output IN
OUT NOCOPY CLOB)

如果您的程序需要只有ROWID,然后程序签名必须是:

(id IN ROWID,input IN BLOB, ouput IN OUT NOCOPY CLOB)

程序筛选器执行要求

若要创建使用PROCEDURE_FILTER偏好指数,索引所有者必须有执行权限的程序。

错误处理

筛选过程可以提高通过正常的 PL/SQL raise_application_error 设施所需的任何错误。这些错误传播到CTX_USER_INDEX_ERRORS视图或报告给用户,具体取决于如何调用筛选器。

程序筛选器首选项示例

考虑筛选过程CTXSYS.NORMALIZE您定义具有下列签名:

PROCEDURE NORMALIZE(id IN ROWID, charset IN VARCHAR2, input IN CLOB, 
output IN OUT NOCOPY VARCHAR2);

若要使用此过程为您的筛选器,设置您的筛选器首选项,如下所示:

begin
ctx_ddl.create_preference('myfilt', 'procedure_filter');
ctx_ddl.set_attribute('myfilt', 'procedure', 'normalize');
ctx_ddl.set_attribute('myfilt', 'input_type', 'clob');
ctx_ddl.set_attribute('myfilt', 'output_type', 'varchar2');
ctx_ddl.set_attribute('myfilt', 'rowid_parameter', 'TRUE');
ctx_ddl.set_attribute('myfilt', 'charset_parameter', 'TRUE');
end;

词法分析器类型

使用词法分析器首选项来指定要索引的文本的语言。若要创建词法分析器首选项,必须使用以下词法分析器类型之一:

表 2-14 词法分析器类型

类型描述
BASIC_LEXER 从语言如英语和使用空白的大多数西方欧洲语言中的文本中提取令牌的 lexer 分隔单词。
MULTI_LEXER 词法分析器的表包含不同语言的文档创建索引
CHINESE_VGRAM_LEXER 从中文文本中提取令牌的词法分析器。
CHINESE_LEXER 从中文文本中提取令牌的词法分析器。
JAPANESE_VGRAM_LEXER 从日语文本中提取令牌的词法分析器。
JAPANESE_LEXER 从日语文本中提取令牌的词法分析器。
KOREAN_MORPH_LEXER 从朝鲜文文本中提取令牌的词法分析器。
USER_LEXER 您创建的用于索引特定语言的词法分析器。
WORLD_LEXER 词法分析器索引表中包含文件的不同的语言 ;在文档中的自动检测语言

BASIC_LEXER

使用BASIC_LEXER类型来标识标记用于创建英语和所有其他支持空白分隔的语言的文本索引。

BASIC_LEXER还允许基地字母转换、 复合词标引、 区分大小写的索引和空格分隔的语言具有扩展字符集的替换拼写。

以英文和法文,你可以使用BASIC_LEXER来启用主题索引。

注:

在查询时查询术语也执行词法分析器并对标记索引 (例如,删除字符和基地字母转换) 之前的任何处理。这将确保查询条件相匹配的文本索引中的标记形式。

BASIC_LEXER支持任何数据库的字符集。

BASIC_LEXER具有下列属性:

表 2-15 BASIC_LEXER 属性

属性属性值
延续 字符
numgroup 字符
numjoin 字符
printjoins 字符
标点 字符
skipjoins 字符
startjoins 非字母数字字符,出现在标记的开头(字符串)
endjoins 非字母数字字符,出现在标记的结尾(字符串)
空白 字符(字符串)
换行符 换行符 ( )

CARRIAGE_RETURN ( )

base_letter 没有 (已禁用)
  是的 (启用)
base_letter_type 泛型 (默认值)
  特定
override_base_letter 真实

FALSE (默认值)

mixed_case 没有 (已禁用)
  是的 (启用)
复合材料 默认 (没有索引,默认设置的复合字)
  德语 (德国组合词索引)
  荷兰语 (荷兰复合字索引)
index_stems 0 无

1 英语

2 派生词缀

3 荷兰

4 法国

5 德国

6 意大利

7 西班牙

index_themes 是的 (启用)
  没有 (禁用默认值)
  没有 (禁用默认值)
index_text YES (缺省启用,
  没有 (已禁用)
prove_themes 是 (已启用,默认值)
  没有 (已禁用)
theme_language 自动 (默认值)
  (任何全球化支持语言)
alternate_spelling 德语 (德国替换拼写)
  丹麦语 (丹麦替换拼写)
  瑞典语 (瑞典替换拼写)
  没有没有替换拼写默认)
new_german_spelling 是啊

无 (默认值)

延续

S指定字符,指示词下一行上继续并应作为单个标记建立索引。最常见的符是连字符 '-' 和反斜杠 。

numgroup

S指定单个字符指示,当它出现在字符串中的数字,这些数字为分组在一个大的单一单元内。

例如,逗号 ',' 可能定义为一个numgroup字符,因为它经常指示数以千计分组,当它出现在数字的字符串。

numjoin

S指定的字符,当他们出现在字符串的位数,导致 Oracle 文本索引的数字字符串作为一个单一的单位或单词。

举个例子,期 '.' 可以定义为 numjoin 个字符,因为它常常充当小数点,当它出现在数字的字符串。

注:

Numjoin和numgroup的默认值是由为数据库指定的全球化支持初始化参数决定的。

一般情况下,一个值,不需要指定为numjoin或numgroup ,创建BASIC_LEXER的 lexer 首选时.

printjoins

S指定的当它们出现在一个词 (开头、 中间或结束),任何地方都处理为字母数字和文本索引中的令牌中包含非字母数字字符。这包括printjoins ,连续发生。

例如,如果连字符-和下划线 '_' 字符被定义为printjoins、 _file_等伪知识分子的术语都存放在文本索引作为伪知识分子和_file_.

注:

如果printjoins字符也被定义为一个标点字符,该字符只处理作为一个字母数字字符如果紧跟着它的字符是一个标准的字母数字字符或已被定义为printjoins或skipjoins的字符。
标点

指定的非字母数字的字符,当它们出现在一个单词的结尾处显示一个句子的结束。默认值是期间 '。 ',问号 '吗? ',和感叹号'!'。

在文本编制索引之前,从令牌中删除被定义为标点的字符。然而,如果一个标点字符也被定义为一个printjoins字符,只有当它是在令牌中的最后一个字符时移除字符。

例如,如果句点 (.) 被定义为printjoins和标点字符,下列转换在进行索引和查询,以及过程中会发生:

令牌索引的标记
.doc .doc
dog.doc dog.doc
狗。doc 狗。doc
那只狗。
狗...... 狗。

此外, BASIC_LEXER使用标点字符结合换行符和空格的字符,来确定句子的段落搜索的句子和段落分隔符。

skipjoins

Specify 非字母数字字符,当它们出现在一个单词内标识 word 作为单个标记 ;然而,字符不会存储与文本索引中的令牌中。

例如,如果连字符 '-' 定义为skipjoins,词伪知识分子存储在pseudointellectual作为文本索引.

注:

printjoins和skipjoins是互斥的。不能为这两个属性指定相同的字符。
startjoins/endjoins

Startjoins,为指定的字符,当遇到一个令牌中的第一个字符作为显式标识标记的开始。字符,以及立即遵循它,任何其他startjoins字符被列入该标记的文本索引项。此外,一个startjoins字符的字符串的第一个startjoins字符隐式结束前一个标记。

Endjoins,为指定的字符,当遇到一个令牌中的最后一个字符作为显式识别标记的结束。字符,以及立即遵循它,任何其他startjoins字符被列入该标记的文本索引项。

下列规则适用于startjoins和endjoins:

  • 字符指定为startjoins/endjoins不能发生的任何其他属性为BASIC_LEXER.

  • startjoins/endjoins字符可以出现只在开头或结尾标记

Printjoins 不同于 endjoins 和 startjoins,位置并不重要。例如, $35将索引作为一个标记如果 $是 startjoin 或 printjoin,而是作为两个标记如果它被定义为 endjoin。

空白

S指定被视为标记之间的空白区域的字符。BASIC_LEXER使用空白字符标点和换行字符结合来识别字符作为句子分隔符的句子和段落搜索的字符串。

空白的预定义的默认值是 '空间' 和 '选项卡。不能更改这些值。指定字符为空格字符将添加到这些默认值。

换行符

S指定表示文本的行尾的字符。BASIC_LEXER使用换行符连同标点符号和空格字符识别作为句子和段落搜索段落分隔符的字符串。

换行符的唯一有效值为 NEWLINECARRIAGE_RETURN (回车)。默认值是NEWLINE.

base_letter

指定存储在文本索引中之前是否有音符 (元音变音、 变、 急性口音,等等) 的字符转换为其基窗体。默认值为没有 (基地字母转换禁用)。基地字母转换和base_letter_type的详细信息,请参阅基础字母转换.

base_letter_type

指定泛型或特定。

泛型的值是默认值,并信变换为基础的手段使用一个适用于所有语言的转换表。基地字母转换和base_letter_type的详细信息,请参阅基础字母转换.

override_base_letter

alternate_spelling同时启用了base_letter ,则时,有时需要重写base_letter ,以防止意外的结果,从串行转换。请参见重写基信转换与替换拼写默认值为 FALSE.

mixed_case

S指定词法分析器叶标记显示在文本中的完全相同的呢,还是将标记转换为全部大写。缺省设置为 NO (标记转换为全部大写)。

注:

Oracle 文本可以确保这个词与查询匹配的被查询的索引是否区分大小写。因此,如果您对您的文本索引启用区分大小写,针对索引的查询都区分大小写。
复合材料

指定是否复合词标引是禁用或启用或 GERMANDUTCH的文本。默认值是DEFAULT(复合字索引禁用)。

通常是在德国的字典中的一个条目的单词不将拆分为复合的茎,而不是字典条目的单词被拆分为复合茎。

要检索的索引的复合茎,必须发出一个干查询,例如$bahnhof。单词表词干分析器语言必须匹配的复合的茎的语言。

阻止用户词典

Oracle 文本附带产生用于ENGLISHDERIVATIONAL所产生的字典 ($ORACLE_HOME/ctx/data/enlx/dren.dct) 的系统。您可以创建您自己的语言,以自定义如何分解单词的用户词典。这些字典是表 2-16所示.

表 2-16 产生用户词典

词典语言
$ORACLE_HOME/ctx/data/frlx/drfr.dct 法语
$ORACLE_HOME/ctx/data/delx/drde.dct 德语
$ORACLE_HOME/ctx/data/nllx/drnl.dct 荷兰语
$ORACLE_HOME/ctx/data/itlx/drit.dct 意大利语
$ORACLE_HOME/ctx/data/eslx/dres.dct 西班牙语

词干的用户词典比那些表 2-16中列出的语言不受支持.

用户词典的格式如下所示:

input term <tab> output term

分解单词的个别部分必须用 # 字符分隔。以下的示例条目是为德语单词火车总站:

Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhofes<tab>Haupt#Bahnhof
Hauptbahnhof<tab>Haupt#Bahnhof
Hauptbahnhoefe<tab>Haupt#Bahnhof
index_themes

是指定索引主题信息用英文或法文。这使得 ABOUT查询更精确。Index_themes和index_text的属性不可能都是号

如果您使用BASIC_LEXER ,并指定index_themes没有值,此属性默认为NO.

可以将此参数设置为 TRUE,任何为包括 CTXCAT 的索引类型。若要与 CATSEARCH 发出关于查询,请将查询模板使用上下文语法。

注:

index_themes需要安装的知识库文章。知识库文章可能或不可能安装 Oracle 文本。在知识的基础上的详细信息,请参阅Oracle 文本应用程序开发人员指南.
prove_themes

指定YES以证明主题。主题证明试图在文档中查找相关的主题。当发现有没有相关的主题时,父主题被消除从文档。

虽然主题证明是可以接受的大型文档,几句简短的文字说明很少证明父主题,从而导致贫穷召回性能与ABOUT查询。

证明结果在较高的精度和减少 (减少返回的行) 召回ABOUT查询的主题。为较高的查全率ABOUT查询中可能不是那么精确,您可以禁用主题证明。YES.

prove_themes属性支持CONTEXTCTXRULE的索引。

theme_language

指定的知识库用于主题代当index_themes设置为YESindex_themes是NO的时将此参数设置有没有任何的影响。

您可以指定任何全球化支持的语言或AUTO您必须为您指定的语言的知识库文章。此版本提供一个知识库中只有英文和法文。在其他语言中,您可以创建您自己的知识库。

默认值是AUTO,它指示系统重新设置此参数的语言环境。

index_stems

指定的词干分析器用于干索引。你可以选择之一

  • 没有一个

  • 英语

  • 派生词缀

  • 荷兰语

  • 法语

  • 德语

  • 意大利语

  • 西班牙语

令牌被阻挡在索引时除了正常形式单一基窗体。索引茎允许更好的查询性能,对于干 ($) 的查询,如$computed.

index_text

对索引词信息指定YESIndex_themes和index_text的属性都不能NO.

缺省设置为NO.

alternate_spelling

GERMANDANISH,或指定SWEDISH,使不同的拼写这些语言之一。启用备用拼写使您能够查询中任何其他形式的单词。

替换拼写默认是关闭的 ;然而,在 Oracle 提供admin/defaults(德语, drdefdk.sql为丹麦语和瑞典语drdefs.sql drdefd.sql ) 的特定于语言的脚本,替换拼写被打开的。如果安装过程中使用这些脚本,然后替换拼写是上。然而,您可以指定NONE ,没有备用的拼写。Oracle 的文本使用替换拼写公约有关详细信息,请参阅替换拼写.

new_german_spelling

指定是否使用BASIC_LEXER的查询返回两个传统和改革 (新) 拼写的德语单词。如果将new_german_spelling设置为是,然后创建索引传统和新形式的单词。如果它设置为否,然后 word 将索引仅作为它在查询中的规定。默认值是号

请参见:

"新的德语拼写"

BASIC_LEXER 示例

下面的示例设置 printjoin 字符和禁用索引与BASIC_LEXER的主题:

begin
ctx_ddl.create_preference('mylex', 'BASIC_LEXER');
ctx_ddl.set_attribute('mylex', 'printjoins', '_-');
ctx_ddl.set_attribute ( 'mylex', 'index_themes', 'NO');
ctx_ddl.set_attribute ( 'mylex', 'index_text', 'YES'); 
end;

若要创建索引,没有主题标引与 printjoins 字符设置所述,请发出以下语句:

create index myindex on mytable ( docs ) 
  indextype is ctxsys.context 
  parameters ( 'LEXER mylex' ); 

MULTI_LEXER

使用MULTI_LEXER到索引文本列包含不同语言的文档。例如,可以使用此词法分析器将英语、 德语和日语文档存储的文本列进行索引。

Lexer 没有属性。

你基地的表中,必须有语言列。以多语言表的索引,您指定的语言列创建索引时。

创建多 lexer 偏好与CTX_DDL.CREATE_PREFERENCE你向多 lexer 偏好与CTX_DDL.ADD_SUB_LEXER程序。

在索引、 MULTI_LEXER检查每一行语言列的值和特定于语言的词法分析器来处理文档中的交换机。

WORLD_LEXER词法分析器还执行多国语言的索引,但不需要单独的语言列 (也就是说,它有自动语言检测)。有关WORLD_LEXER的详细信息,请参阅"WORLD_LEXER".

多语言 Stoplists

当您使用MULTI_LEXER时,您还可以为索引使用多语言的非索引字表。

请参见:

"多语言 Stoplists".

MULTI_LEXER 示例

创建多语言表语言列与主键、 文本列中,如下所示:

create table globaldoc (
   doc_id number primary key,
   lang varchar2(3),
   text clob
);

假设表保存大多是英文资料,与偶尔的德语或日语文档。若要处理这三种语言,您必须创建三子词法分析器、 一个用于英语、 德语和日语:

ctx_ddl.create_preference('english_lexer','basic_lexer');
ctx_ddl.set_attribute('english_lexer','index_themes','yes');
ctx_ddl.set_attribute('english_lexer','theme_language','english');

ctx_ddl.create_preference('german_lexer','basic_lexer');
ctx_ddl.set_attribute('german_lexer','composite','german');
ctx_ddl.set_attribute('german_lexer','mixed_case','yes');
ctx_ddl.set_attribute('german_lexer','alternate_spelling','german');

ctx_ddl.create_preference('japanese_lexer','japanese_vgram_lexer');

创建多 lexer 首选项:

ctx_ddl.create_preference('global_lexer', 'multi_lexer');

由于存储的文件大多是英语,使英语的词法分析器使用 CTX_DDL 的默认设置。ADD_SUB_LEXER:

ctx_ddl.add_sub_lexer('global_lexer','default','english_lexer');

现在,他们各自的语言与 CTX_DDL 中添加德语和日语的词法分析器。ADD_SUB_LEXER程序。此外假定语言列表示在标准的 ISO 639-2 的语言代码,所以添加那些作为替换值。

ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');

现在,创建索引globalx,指定多 lexer 偏好和语言列参数子句中,如下所示:

create index globalx on globaldoc(text) indextype is ctxsys.context
parameters ('lexer global_lexer language column lang');

查询多语言表

在查询时,多词法分析器检查的语言设置,并使用该语言的子词法分析器偏好来解析查询。如果不设置语言,则使用默认的词法分析器。

否则为查询是解析,像往常一样运行。索引包含令牌从多国语言,所以这样的查询可以返回文档中几种语言。若要限制您为给定语言的查询,请使用语言栏上的结构化的子句。

CHINESE_VGRAM_LEXER

CHINESE_VGRAM_LEXER类型标识用于创建文本索引的中文文本中的标记。

CHINESE_VGRAM_LEXER 属性

CHINESE_VGRAM_LEXER具有以下属性:

表 2-17 CHINESE_VGRAM_LEXER 属性

属性属性值
mixed_case_ASCII7 使大小写混合 (上部和小写字母) 搜索的 ASCII7 文本 (例如,猫和猫)。允许的值都YESNO(默认值)。

字符集

您可以使用此词法分析器如果您数据库的字符集是以下内容之一:

  • AL32UTF8

  • ZHS16CGB231280

  • ZHS16GBK

  • ZHS32GB18030

  • ZHT32EUC

  • ZHT16BIG5

  • ZHT32TRIS

  • ZHT16MSWIN950

  • ZHT16HKSCS

  • UTF8

CHINESE_LEXER

CHINESE_LEXER类型标识繁体及简体的中文文本,用于创建 Oracle 文本索引中的标记。

此词法分析器提供了以下好处超过CHINESE_VGRAM_LEXER:

  • 生成较小的索引

  • 更好的查询响应时间

  • 生成真正的单词标记导致更好的查询精度

  • 支持停止词

CHINESE_LEXER使用不同的算法来生成标记,因为索引时间是长于与CHINESE_VGRAM_LEXER.

如果你的数据库角色是由 Oracle 支持中文或 Unicode 字符集之一,您可以使用此词法分析器。

CHINESE_LEXER 属性

CHINESE_LEXER具有以下属性:

表 2-18 CHINESE_LEXER 属性

属性属性值
mixed_case_ASCII7 使大小写混合 (上部和小写字母) 搜索的 ASCII7 文本 (例如,猫和猫)。允许的值都YESNO(默认值)。

自定义汉语词汇

你可以修改现有词典 (词典) 采用中国的词法分析器,或创建您自己的汉语词汇,使用ctxlc命令。

JAPANESE_VGRAM_LEXER

JAPANESE_VGRAM_LEXER类型标识在日语中的令牌创建文本索引。它不具有属性。此词法分析器支持干 ($) 运算符。

JAPANESE_VGRAM_LEXER 属性

此词法分析器具有下列属性:

表 2-19 JAPANESE_VGRAM_LEXER 属性

属性属性值
分隔符 指定NONEALL忽略某些日本的空白字符如全角正斜杠或全宽的中间点。默认值是NONE.
mixed_case_ASCII7 使大小写混合 (上部和小写字母) 搜索的 ASCII7 文本 (例如,猫和猫)。允许的值都YESNO(默认值)。

JAPANESE_VGRAM_LEXER 字符集

您可以使用此词法分析器如果您数据库的字符集是以下内容之一:

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

JAPANESE_LEXER

JAPANESE_LEXER类型标识在日语中的令牌创建文本索引。此词法分析器支持干 ($) 运算符。

此词法分析器提供了以下好处超过JAPANESE_VGRAM_LEXER:

  • 生成较小的索引

  • 更好的查询响应时间

  • 生成真正的单词标记导致更好的查询精度

因为JAPANESE_LEXER使用一种新的算法来生成令牌,索引时间是长于与JAPANESE_VGRAM_LEXER.

自定义日本词汇

你可以修改现有词典 (词典) 采用日本的词法分析器,或创建您自己的日本词汇,使用ctxlc命令。

JAPANESE_LEXER 属性

此词法分析器具有下列属性:

表 2-20 JAPANESE_LEXER 属性

属性属性值
分隔符 指定NONEALL忽略某些日本的空白字符如全角正斜杠或全宽的中间点。默认值是NONE.
mixed_case_ASCII7 使大小写混合 (上部和小写字母) 搜索的 ASCII7 文本 (例如,猫和猫)。允许的值都YESNO(默认值)。

日本的 LEXER 字符集

JAPANESE_LEXER支持以下字符集:

  • JA16SJIS

  • JA16EUC

  • UTF8

  • AL32UTF8

  • JA16EUCTILDE

  • JA16EUCYEN

  • JA16SJISTILDE

  • JA16SJISYEN

日本的词法分析器的示例

JAPANESE_LEXER指定用于创建文本索引时, JAPANESE_LEXER将其一个句子解析成单词。

例如,以下复词 (自然语言研究所)

Description of nihongo1.gif follows
图 nihongo1.gif 的描述

被索引作为三个标记:

Description of nihongo2.gif follows
图 nihongo2.gif 的描述

为了解决一个句子成单词,引用的内部字典。当不能在内部字典中找到单词时,Oracle 文本将使用JAPANESE_VGRAM_LEXER来解决它。

KOREAN_MORPH_LEXER

KOREAN_MORPH_LEXER类型标识中用于创建 Oracle 文本索引的朝鲜语文字的标记。

提供的字典

KOREAN_MORPH_LEXER使用四个字典:

表 2-21 KOREAN_MORPH_LEXER 字典

词典文件
系统 $ORACLE_HOME/ctx/data/kolx/drk2sdic.dat
语法 $ORACLE_HOME/ctx/data/kolx/drk2gram.dat
Stopword $ORACLE_HOME/ctx/data/kolx/drk2xdic.dat
用户定义 $ORACLE_HOME/ctx/data/kolx/drk2udic.dat

使用的 KSC 5601 或 MSWIN949 的字符集应该编写语法,用户定义的和 stopword 字典。您可以修改这些词典使用已定义的规则。不能修改系统词典。

可以将未注册的单词添加到用户定义的词典文件。用于指定新单词的规则是在文件中。

受支持的字符集

您可以使用KOREAN_MORPH_LEXER ,如果您数据库的字符集是以下内容之一:

  • KO16KSC5601

  • KO16MSWIN949

  • UTF8

  • AL32UTF8

KOREAN_MORPH_LEXER使混合大小写的搜索。

Unicode 支持

KOREAN_MORPH_LEXER支持:

  • 在 Unicode 中定义的非 KSC5601 韩文字符的单词

  • 补充字符

请参见:

对补充字符的信息,请参阅Oracle 数据库全球化支持指南

韩国的一些文件可能有非 KSC5601 个字符。KOREAN_MORPH_LEXER可以认识到所有可能的 11,172 韩国 (朝鲜) 字符,此类文件还使用 UTF8 或 AL32UTF8 字符集解释。

使用您的数据库的 AL32UTF8 字符集来提取代理项字符。默认情况下, KOREAN_MORPH_LEXER提取所有系列的代理项字符在文档中为每个数据系列的一个标记。

韩国 Unicode 支持的限制

朝鲜文汉字转换为朝鲜语 (韩语), KOREAN_MORPH_LEXER支持仅 4888 的朝鲜文汉字字符在 KSC5601 中定义。

KOREAN_MORPH_LEXER 属性

当您使用KOREAN_MORPH_LEXER时,您可以指定以下属性:

表 2-22 KOREAN_MORPH_LEXER 属性

属性属性值
verb_adjective 指定TRUEFALSE指数动词、 形容词或副词。默认值为FALSE.
one_char_word 指定TRUEFALSE来索引一个音节。默认值为FALSE.
数量 指定TRUEFALSE的索引号。默认值为FALSE.
user_dic 指定TRUEFALSE的指标用户词典。默认值是TRUE.
stop_dic 指定TRUEFALSE,则用 stop 单词的字典。默认值为TRUE停止词词典属于KOREAN_MORPH_LEXER.
复合材料 指定索引样式的复合名词。

指定COMPOSITE_ONLY索引只复合名词。

指定NGRAM索引所有名词组成复合名词。

指定COMPONENT_WORD索引单个名词复合名词与复合名词本身的组件。默认值是COMPONENT_WORD.

下面的示例描述NGRAM COMPONENT_WORD之间的区别.

语素 指定TRUEFALSE的形态学分析。如果设置为FALSE,创建令牌由分隔符如在文档中的空白区域划分对那句话。默认值是TRUE.
to_upper 指定TRUEFALSE ,将英语转换为大写。默认值是TRUE.
朝鲜文汉字 指定TRUE指数朝鲜文汉字字符。如果设置为FALSE,朝鲜文汉字转换为朝鲜文字符。默认值为FALSE.
long_word 指定TRUE指数在韩国有超过 16 个音节的长单词。默认值为FALSE.
日语 指定TRUE要编制索引的日语字符在 Unicode (仅在 2 字节区域)。默认值为FALSE.
英语 指定TRUE指数的字母数字字符串。默认值是TRUE.

限制

句子和段落章节不支持KOREAN_MORPH_LEXER.

KOREAN_MORPH_LEXER 示例: 将复合属性设置

你可以使用复合属性来控制如何复合名词被编入索引。

NGRAM 示例

当您指定NGRAM复合属性时,复合名词索引与所有可能的组件标记。例如,以下复合名词 (信息处理研究所)

Description of 1.jpg follows
图 1.jpg 的描述

被索引作为六个标记:

Description of 2.jpg follows
图 2.jpg 的描述

Description of 3.jpg follows
图 3.jpg 的描述

您可以指定NGRAM索引,如下所示:

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','NGRAM');
end


若要创建索引:

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');
COMPONENT_WORD 示例

当你为复合属性指定了COMPONENT_WORD时,复合名词和其组件编制索引。例如,以下复合名词 (信息处理研究所)

Description of 1.jpg follows
图 1.jpg 的描述

作为四个令牌被索引:

Description of 1.jpg follows
图 1.jpg 的描述

Description of comp.jpg follows
图 comp.jpg 的描述

您可以指定COMPONENT_WORD索引,如下所示:

begin
ctx_ddl.create_preference('my_lexer','KOREAN_MORPH_LEXER');
ctx_ddl.set_attribute('my_lexer','COMPOSITE','COMPONENT_WORD');
end

若要创建索引:

create index koreanx on korean(text) indextype is ctxsys.context
parameters ('lexer my_lexer');

USER_LEXER

使用 USER_LEXER 可以插上您自己的特定于语言的词法分析解决方案。这使您可以定义为不支持 Oracle 文本的语言的词法分析器。它还使您可以定义新的词法分析器的一种语言,支持,但其词法分析器不适合您的应用程序。

您注册与 Oracle 文本的用户定义词法分析器是由两个例程,您必须提供:

表 2-23 USER_LEXER 为用户定义的例程

用户定义的例程描述
索引过程 存储的过程 (PL/SQL) 实现的文档和停止词标记化。输出必须是 XML 文档作为指定在这一节。
查询过程 存储的过程 (PL/SQL) 实现的查询词标记化。输出必须是 XML 文档作为指定在这一节。

限制

USER_LEXER不支持以下功能:

  • CTX_DOC.GISTCTX_DOC.THEMES

  • CTX_QUERY.HFEEDBACK

  • ABOUT查询运算符

  • CTXRULE为索引类型

  • VGRAM索引算法

USER_LEXER 属性

USER_LEXER 具有下列属性:

表 2-24 USER_LEXER 属性

属性属性值
INDEX_PROCEDURE 存储过程的名称。提供没有默认值。
INPUT_TYPE VARCHAR2,CLOB。默认值为 CLOB。
QUERY_PROCEDURE 存储过程的名称。提供没有默认值。

INDEX_PROCEDURE

此回调存储过程是 Oracle 文本称为标记文档或停用词在非索引字表对象中找到所需。

要求

此过程可以是 PL/SQL 存储过程。

索引所有者必须对此存储过程的 EXECUTE 权限。

此存储的过程不能取代或下降之后创建索引。您可以替换或删除此存储的过程后删除索引。

参数

两个不同的接口支持的用户定义的词法分析器索引过程:

限制

此过程必须不执行任何以下操作:

  • 回滚

  • 显式或隐式提交当前事务

  • 发出任何其它事务控制语句

  • 更改会话语言或领土

子元素的 XML 文档的标记返回必须在相同的顺序标记出现在被标记的文档或停止 word 中的根元素。

此存储过程的行为必须是确定对所有参数。

INPUT_TYPE

两个不同的接口支持的用户定义的词法分析器索引过程。一个接口使文档或停止词和编码为 XML 作为 VARCHAR2 数据类型传递,而其他接口使用 CLOB 数据类型对应的标记。此属性指示由 INDEX_PROCEDURE 属性所指定的存储过程实现的接口。

VARCHAR2 接口

BASIC_WORDLIST 属性表 2-25描述的接口,使文档或停止从非索引字表对象要被分词 word 将作为 VARCHAR2 者从 Oracle 文本到该存储过程,这些令牌作为传递 VARCHAR2 以及从存储过程追溯到 Oracle 文本传递。

您用户定义的 lexer 索引程序应使用此接口,当要创建索引的列中的所有文档都是小于或等于 32512 字节和令牌可以由小于或等于 32512 字节。在这种情况下也可以使用 CLOB 接口给出了在表 2-26 ,虽然 VARCHAR2 接口通常会比 CLOB 接口更快地执行。

这一程序必须定义以下参数:

表 2-25 VARCHAR2 接口的 INDEX_PROCEDURES

参数位置参数模式参数数据类型描述
1 VARCHAR2 文档或停止词从要被分词的非索引字表对象。

如果文档是大于 32512 字节然后 Oracle 文本会汇报分度误差的文档级别。

2 在出 VARCHAR2 作为 XML 编码的标记。

如果文档包含没有标记,则必须返回 NULL 或返回的 XML 文档中的标记元素必须包含任何子元素。

数据的字节长度必须小于或等于 32512。

若要提高性能,请使用 NOCOPY 提示,声明此参数时。这传递数据的引用,而不是将数据传递的价值。

此过程返回的 XML 文档不应该包含多余的空格字符 (通常用来提高可读性)。这将减少反过来减少传输时间该 XML 文档的大小。

为了提高性能,index_procedure 不应验证与运行时相应的 XML 架构的 XML 文档。

请注意此参数是在出性能的目的。存储的过程具有不需要使用的值。

3 布尔值 Oracle 文本将此参数设置为 TRUE,当 Oracle 文本所需的字符偏移量和认定被标记的文档中标记的字符长度。

Oracle 文本将此参数设置为 FALSE,当文本不感兴趣的字符偏移量和认定被标记的文档中标记的字符长度。这意味着不过,关闭 XML 属性和 len 不使用。

CLOB 接口

表 2-26描述 CLOB 界面,使文档或停止从非索引字表对象,将标记词作为 CLOB 者从 Oracle 文本到该存储过程,这些令牌作为传递 CLOB,以及从存储过程追溯到 Oracle 文本传递。

索引过程的用户定义词法分析器应使用此接口,当至少一个要被索引的列中的文档是大于 32512 字节或由超过 32512 个字节表示对应的标记。

表 2-26 CLOB 接口为 INDEX_PROCEDURE 的

参数位置参数模式参数数据类型描述
1 CLOB 文档或停止词从要被分词的非索引字表对象。
2 在出 CLOB 作为 XML 编码的标记。
3 布尔值 如果文档包含没有标记,则必须返回 NULL 或返回的 XML 文档中的标记元素必须包含任何子元素。

若要提高性能,请使用 NOCOPY 提示,声明此参数时。这传递数据的引用,而不是将数据传递的价值。

此过程返回的 XML 文档不应该包含多余的空格字符 (通常用来提高可读性)。这将减少反过来减少传输时间该 XML 文档的大小。

为了提高性能,index_procedure 不应验证与运行时相应的 XML 架构的 XML 文档。

请注意此参数是在出性能的目的。存储的过程具有不需要使用的值。值将始终为截断的 CLOB。

第一和第二个参数是临时 CLOB。避免将这些 CLOB 定位器分配给其他定位器变量。将形参 CLOB 定位器分配给另一个定位器变量会导致临时的 CLOB 要创建导致性能命中一个新副本。

QUERY_PROCEDURE

此回调存储过程是 Oracle 文本称为标记词s 在查询中的所需。以空格分隔的一组字符 (不包括的查询运算符) 在查询中将标识 Oracle 文本作为一个.

要求

此过程可以是 PL/SQL 存储过程。

索引所有者必须对此存储过程的 EXECUTE 权限。

此存储的过程不能替换或被丢弃后创建索引。您可以替换或删除此存储的过程后删除索引。

限制

此过程必须不执行任何以下操作:

  • 回滚

  • 显式或隐式提交当前事务

  • 发出任何其它事务控制语句

  • 更改会话语言或领土

返回的 XML 文档的根元素标记的子元素必须是相同的顺序标记出现在查询词被标记中。

此存储过程的行为必须是确定对所有参数。

参数

表 2-27描述了用户定义的词法分析器查询程序的界面:

表 2-27 用户定义词法分析器查询程序 XML 架构属性

参数位置参数模式参数数据类型描述
1 VARCHAR2 查询词被分词。
2 CTX_ULEXER_WILDCARD_TAB 通配符字符 (%和 _) 查询字中的字符偏移量。如果查询词通过 Oracle 文本中不包含任何通配符字符然后此索引的表将为空。

通配符查询词中的必须保留在通配符查询功能才能正常工作的顺序返回的标记。

字符偏移量为 0 (零) 的基础。偏移的信息遵循 USC 2 代码点语义。

3 在出 VARCHAR2 作为 XML 编码的标记。

如果查询词包含没有标记然后必须返回 NULL 或返回的 XML 文档中的标记元素必须包含任何子元素。

数据的长度必须小于-等于 32512 字节为单位)。

作为 XML 编码的标记

由存储过程返回的标记的顺序必须表示为 XML 1.0 文档。XML 文档必须是有效给出了在以下各节中的 XML 架构。

限制

为了提升性能的此功能,XML 解析器在 Oracle 文本将不会执行验证和将不是一个全功能的 XML 兼容解析器。这意味着将支持只有很少的 XML 功能。不支持以下 XML 功能:

  • 文档类型声明 (例如, <!DOCTYPE [...]>),因此实体声明。只有下列内置实体可以引用: lt,gt,amp 及 apos。

  • CDATA 节。

  • 评论。

  • 处理指令。

  • XML 声明 (例如, <?xml version="1.0" ...?>).

  • 命名空间。

  • 使用的元素和属性,而不是由相应的 XML 架构定义。

  • 字符引用 (用于示例 & #x099F;)。

  • xml: space 属性。

  • xml: lang 属性

没有位置、 用户定义的索引程序的 XML 架构

本节介绍了额外的约束条件的用户定义的词法分析器索引过程,当第三个参数为 FALSE 返回的 XML 文档。返回的 XML 文档必须是有效下面的 XML 架构:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="xsd:token"/> 
          <xsd:group ref="IndexCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- 
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for indexing 
  -->
  <xsd:group name="IndexCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="xsd:token"/>
      <xsd:element name="compMem" type="xsd:token" minOccurs="0"
maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

</xsd:schema>

这里是一些此 XML 架构的限制:

  • 根元素是令牌。这是强制性的。它不具有属性。

  • 根元素可以有零个或更多子元素。子元素可以是以下之一: eos、 eop、 num,单词和 compMem。其中每一个表示特定类型的令牌。

  • CompMem 元素的前面必须由 word 元素或 compMem 元素。

  • Eos 和 eop 元素没有属性,并且必须是空的元素。

  • Num,单词和 compMem 的元素有没有属性。Oracle 文本将正常化这些元素的内容,如下所示: 空格字符转换成空格字符、 折叠到单个空格字符的相邻的空格字符、 移除前导空格和尾随空格,执行实体引用替换和截断为 64 个字节。

表 2-28描述前面的 XML 架构中定义的元素名称。

表 2-28 用户定义词法分析器索引程序的 XML 架构元素名称

元素描述
此元素表示一个简单的单词标记。元素的内容是这个词本身。Oracle 文本并识别此令牌被停用词或非停用词以及适当地处理它的工作。
全国矿工工会 此元素表示一个算法的数字标记。元素的内容是算术数字本身。Oracle 文本视为停用词的此令牌,如果非索引字表偏好已作为 stopclass 添加的数字。否则此令牌被视为单词标记相同的方式。

支持这种令牌类型是可选的。没有为此令牌类型的支持,添加 NUMERBS stopclass 将有没有影响。

eos 此元素表示句子结束标记。Oracle 文本使用此信息,以便它可以支持内句子查询。

支持这种令牌类型是可选的。没有为此令牌类型的支持,针对一句节的查询将不按预期工作。

eop 此元素表示段落结束标记。Oracle 文本使用此信息,以便它可以支持内段的查询。

支持这种令牌类型是可选的。没有为此令牌类型的支持,对段节的查询将不按预期工作。

compMem 相同的 word 元素,只是隐式的词偏移量前一个单词标记相同。

此令牌类型的支持是可选的。

示例

文档: Vom Nordhauptbahnhof 和 aus der Innenstadt zum Messegelände。

令牌:

<tokens>
  <word> VOM </word>
  <word> NORDHAUPTBAHNHOF </word>
  <compMem>NORD</compMem>
  <compMem>HAUPT </compMem>
  <compMem>BAHNHOF </compMem>
  <compMem>HAUPTBAHNHOF </compMem>
  <word> UND </word>
  <word> AUS </word>
  <word> DER </word>
  <word> INNENSTADT </word>
  <word> ZUM </word>
  <word> MESSEGELÄNDE </word>
  <eos/>
</tokens>

示例

文档: Oracle 数据库 10g版 1

令牌:

<tokens>
  <word> ORACLE10G</word>
  <word> RELEASE </word>
  <num> 1 </num>
</tokens>
示例

文档: 在哪里工资 < 25000.00 和工作 = 'F & B 经理'

令牌:

<tokens>
  <word> WHERE </word>
  <word> salary&lt;2500.00 </word>
  <word> AND </word>
  <word> job </word>
  <word> F&amp;B </word>
  <word> Manager </word>
</tokens>

用户定义的索引过程与位置的 XML 架构

本节介绍了额外的限制强加给由用户定义的词法分析器索引过程,第三个参数为 TRUE 时返回的 XML 文档。返回的 XML 文档必须符合下面的 XML 架构的有效:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="eos" type="EmptyTokenType"/>
          <xsd:element name="eop" type="EmptyTokenType"/>
          <xsd:element name="num" type="DocServiceTokenType"/>
          <xsd:group ref="DocServiceCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- 
  Enforce constraint that compMem element must be preceeded by word element
  or compMem element for document service
  -->
  <xsd:group name="DocServiceCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="DocServiceTokenType"/>
      <xsd:element name="compMem" type="DocServiceTokenType" minOccurs="0"
           maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- EmptyTokenType defines an empty element without attributes -->
  <xsd:complexType name="EmptyTokenType"/>

  <!-- 
  DocServiceTokenType defines an element with content and mandatory attributes 
  -->
  <xsd:complexType name="DocServiceTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="off" type="OffsetType" use="required"/>
        <xsd:attribute name="len" type="xsd:unsignedShort" use="required"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="OffsetType">
    <xsd:restriction base="xsd:unsignedInt">
      <xsd:maxInclusive value="2147483647"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

一些此 XML 架构的限制如下:

  • 根元素是令牌。这是强制性的。它不具有属性。

  • 根元素可以有零个或更多子元素。子元素可以是以下之一: eos、 eop、 num,单词和 compMem。其中每一个表示特定类型的令牌。

  • CompMem 元素的前面必须由 word 元素或 compMem 元素。

  • Eos 和 eop 元素没有属性,并且必须是空的元素。

  • Num,单词和 compMem 的元素有两个强制性属性:off和长度。Oracle 文本将正常化这些元素的内容,如下所示: 空格字符转换成空格字符、 折叠到单个空格字符的相邻的空格字符、 移除前导空格和尾随空格,执行实体引用替换和截断为 64 个字节。

  • off属性值必须是介于 0 到 2147483647 包容性之间的整数。

  • len属性值必须是整数 0 和 65535 之间的包容性。

表 2-28描述前面的 XML 架构中定义的元素类型。

表 2-29描述前面的 XML 架构中定义的属性。

表 2-29 用户定义词法分析器索引程序 XML 架构属性

属性描述
关闭 此属性表示的字符偏移量的标记出现在被标记的文档。

偏移量是字符文档传递给用户定义的词法分析器索引过程,不是由数据存储区读取的文档。获取数据存储区的文件可能由筛选器对象或节组的对象,或两者之前被传递给用户定义的词法分析器索引过程, 预先处理。

正在标记文档中的第一个字符的偏移量为 0 (零)。偏移的信息遵循 USC 2 代码点语义。

莱恩 此属性表示该标记的字符长度 (SQL 函数长度相同的语义) 出现在被标记的文档。

长度是传递给用户定义的词法分析器索引过程,不是文档数据存储区读取的字符文件。在被传递给用户定义的词法分析器索引过程前可能通过筛选器对象或节组对象预先处理文档获取数据存储区。

长度信息遵循 USC 2 代码点语义。

off属性值和len属性值的总和必须小于或等于被标记文档中的字符总数。这是为了确保文件偏移量和被引用的字符在文档边界内。

示例

文档: 用户定义的词法分析器。

令牌:

<tokens>
  <word off="0" len="4"> USE </word>
  <word off="5" len="7"> DEF </word>
  <word off="13" len="5"> LEX </word>
  <eos/>
</tokens>

用户定义的词法分析器查询程序的 XML 架构

本节介绍了额外的限制强加给用户定义的词法分析器查询过程所返回的 XML 文档。返回的 XML 文档必须是有效下面的 XML 架构:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="tokens">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="num" type="QueryTokenType"/>
          <xsd:group ref="QueryCompositeGroup"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

<!--
Enforce constraint that compMem element must be preceeded by word element
or compMem element for query
-->
  <xsd:group name="QueryCompositeGroup">
    <xsd:sequence>
      <xsd:element name="word" type="QueryTokenType"/>
      <xsd:element name="compMem" type="QueryTokenType" minOccurs="0"
                                              maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:group>

  <!-- 
  QueryTokenType defines an element with content and with an optional attribute
  -->
  <xsd:complexType name="QueryTokenType">
    <xsd:simpleContent>
      <xsd:extension base="xsd:token">
        <xsd:attribute name="wildcard" type="WildcardType" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:simpleType name="WildcardType">
    <xsd:restriction base="WildcardBaseType">
      <xsd:minLength value="1"/>
      <xsd:maxLength value="64"/>
    </xsd:restriction>     
  </xsd:simpleType>

  <xsd:simpleType name="WildcardBaseType">
    <xsd:list>
      <xsd:simpleType>
        <xsd:restriction base="xsd:unsignedShort">
          <xsd:maxInclusive value="378"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:list>
  </xsd:simpleType>

</xsd:schema>

这里是一些此 XML 架构的限制:

  • root元素是令牌。这是强制性的。它不具有属性。

  • root元素可以有零个或更多子元素。子元素可以是以下之一: numword其中每一个表示特定类型的令牌。

  • compMem元素的前面必须由word元素或compMem元素。

    compMem的目的是,使USER_LEXER查询返回多个窗体为单个查询。例如,如果用户定义的词法分析器索引词银行为BANK(FINANCIAL)BANK(RIVER),查询过程可以返回作为一个word和一个compMem元素作为第二第一学期:

    <tokens>
      <word>BANK(RIVER)</word>
      <compMem>BANK(FINANCIAL)</compMem>
    </tokens>
    
    

    请参阅表 2-30,更多关于 compMem元的"用户定义词法分析器查询程序 XML 架构属性"

  • Num 和 word 元素有一个单一的可选属性: 通配符。Oracle 文本将正常化这些元素的内容,如下所示: 空格字符转换成空格字符、 折叠到单个空格字符的相邻的空格字符、 移除前导空格和尾随空格,执行实体引用替换和截断为 64 个字节。

  • 通配符属性值是白色空间分隔的整数列表。整数的最小数目是 1,整数的最大数目是 64。整数值必须介于 0 和 378 包容性。Intriguers 在列表中的可以按任何顺序。

表 2-28描述前面的 XML 架构中定义的元素类型。

表 2-30介绍了前面的 XML 架构中定义的属性。

表 2-30 用户定义词法分析器查询程序 XML 架构属性

属性描述
compMem 相同的word元素,但其隐式词偏移量是以前的word标记一样。Oracle 文本将等同于此令牌与前面的 word标记和随后compMem令牌使用查询EQUIV运算符。
通配符 任何 %或 _ 的字符在查询中,都没有逃过由用户被视为通配符字符,因为它们会被其他字符代替。这些查询中的通配符字符必须为通配符查询功能才能正常工作秩序的标记化期间保留。此属性所表示元素的内容中的通配符字符的字符偏移的量 (SQL 函数长度相同的语义)。Oracle 文本将调整这些元素的内容进行任何正常化的偏移量。偏移量所指向的字符必须要么是 %或 _ 字符。

在元素的内容中的第一个字符的偏移量为 0。偏移的信息遵循 USC 2 代码点语义。

如果令牌中不包含任何通配符字符必须不指定此属性。

示例

查询词: 伪变身 %

令牌:

<tokens>
  <word> PSEUDO </word>
  <word wildcard="1 7"> %MORPH% </word>
</tokens>
示例
Query word: <%>
Tokens:
<tokens>
  <word wildcard="5"> &lt;%&gt; </word>
</tokens>

WORLD_LEXER

使用WORLD_LEXER对包含不同语言的文档的索引文本列。例如,可以使用此词法分析器将英语、 日语和德语文档存储的文本列进行索引。

WORLD_LEXER不同于MULTI_LEXERWORLD_LEXER将自动检测文档的语言。不像MULTI_LEXERWORLD_LEXER不需要您有一个语言列在基础表中或指定的语言列,当您创建索引时。此外,它是不必要使用 sub-词法分析器与MULTI_LEXER一样。(请参见MULTI_LEXER.)

Lexer 没有属性。

WORLD_LEXER工程与语言的字符集的 Unicode 4.0 标准所定义。WORLD_LEXER可以使用的语言的列表,请参阅"世界词法分析器功能".

WORLD_LEXER 属性

WORLD_VGRAM_LEXER具有以下属性:

表 2-31 WORLD_LEXER 属性

属性属性值
mixed_case 使大小写混合 (上部和小写字母) 搜索的文本 (例如,猫和猫)。允许的值都YESNO(默认值)。

WORLD_LEXER 示例

下面是一个示例创建索引使用WORLD_LEXER.

exec ctx_ddl.create_preference('MYLEXER', 'world_lexer');
create index doc_idx on doc(data)
  indextype is CONTEXT
  parameters ('lexer MYLEXER
               stoplist CTXSYS.EMPTY_STOPLIST');

单词表 类型

使用的单词表首选项以启用查询选项例如词干分析,模糊匹配为您的语言。您还可以使用单词表偏好来启用子字符串和前缀索引,从而提高了通配符查询CONTAINSCATSEARCH的性能.

若要创建单词表首选项,必须使用BASIC_WORDLIST,这是唯一可用的类型。

BASIC_WORDLIST

使用BASIC_WORDLIST类型来启用词干和模糊匹配或者创建前缀索引,与文本索引。

请参见:

有关干和模糊算子的详细信息,请参阅第 3 章,"Oracle 文本包含查询运算符".

BASIC_WORDLIST具有下列属性:

表 2-32 BASIC_WORDLIST 属性

属性属性值
词干分析器 指定要使用哪个语言词干分析器。您可以指定以下内容之一:

NULL (没有词干)

英语 (英语屈折)

派生词缀 (英语词缀)

荷兰语

法语

德语

意大利语

西班牙语

自动 (自动语言-检测为产生上述的语言。不自动-检测日本。)

日语

fuzzy_match 指定哪些模糊匹配群集中使用。您可以指定以下内容之一:

自动 (自动语言检测为词干)

CHINESE_VGRAM

荷兰语

英语

法语

泛型

德语

意大利语

JAPANESE_VGRAM

朝鲜语

OCR

西班牙语

fuzzy_score 指定默认下限的模糊评分。请指定一个介于 0 和 80。分数低于这个数字的文本不会返回。默认值为 60。
fuzzy_numresults 指定模糊扩产的最大数目。使用数字 0 至 5000 人之间。默认值为 100。
substring_index 指定 TRUE 为 Oracle 文本来创建一个子字符串的索引。子字符串索引提高了左截断和双截断通配符查询 (如%ing ) 或%奔驰 %。默认值为 FALSE。

TRUE,为了使用了substring_index设置为的单词表创建文本索引创建索引的用户需要CREATE TRIGGER系统特权。

prefix_index 指定对启用前缀索引。前缀索引可以提高性能为右截断的通配符搜索如 %。默认值为 FALSE。
prefix_length_min 指定索引的前缀的最小长度。默认值为 1。长度信息必须遵循 USC 2 代码点语义。
prefix_length_max 指定索引的前缀的最大长度。默认值为 64。长度信息必须遵循 USC 2 代码点语义。
wlidcard_maxterms 在通配符扩展中指定条件的最大数目。使用 1 和 15000 之间的一个数字。默认为 5000。
词干分析器

指定用于在文本查询中的单词词干的词干分析器。当您不指定一个值为词干分析器时,默认为ENGLISH.

指定AUTO系统来自动设置的词干的语言,根据会话的语言设置。没有语言的词干分析器时,默认值为NULLNULL的词干分析器,干操作员在查询中将被忽略。

您可以创建您自己词干的用户词典。更多的信息,请参阅"阻止用户词典"

fuzzy_match

S指定哪些模糊匹配例程用于列。模糊匹配目前支持英语,日语,以及在较小的程度上,西方的欧洲语言。

注:

汉语和韩语的fuzzy_match属性值是防止的英语和日语的模糊匹配例程使用在中文和朝鲜文的虚拟属性值。

Fuzzy_match的默认值是GENERIC.

指定AUTO系统来自动设置模糊匹配的语言根据会话的语言设置。

fuzzy_score

指定默认下限的模糊评分。请指定一个介于 0 和 80。分数低于这个数字的文本不会返回。默认值为 60。

模糊积分是衡量查询词扩展的词是多么接近。分数越高越好这场比赛。使用此参数来限制模糊扩产到最好的比赛。

fuzzy_numresults

指定模糊扩产的最大数目。使用 0 到 5000 之间的数字。默认值为 100。

设置模糊的扩张限制扩展到指定数目的最匹配的单词。

substring_index

指定TRUE为 Oracle 文本来创建一个子字符串的索引。子字符串索引可以提高性能为左截断或双截断通配符查询 (如%ing ) 或%奔驰 %。默认值为 false。

子字符串索引索引和磁盘资源具有下列影响:

  • 创建索引和 DML 处理是慢达 4 倍

  • 创建的子字符串索引的大小是大约 $X 指数对 word 表格的大小。

  • substring_index启用索引创建需要更多的回滚段比与子字符串索引的索引刷新期间关闭。Oracle 建议您下列操作之一时创建的子字符串的索引:

    • 使可用双平常的回滚或

    • 减少索引内存来减小索引刷新到磁盘

prefix_index

指定yes以启用前缀索引。前缀索引可以提高性能为右截断的通配符搜索如收件人 %。默认值为NO.

注:

启用前缀索引增加索引的大小。

到多个前缀,在 $I 表中存储的前缀索引排骨了令牌。例如,单词TOKENTOY通常是编入索引,这样 $I 表中:

令牌类型信息
令牌 0 POS DOCID 1 1
玩具 0 POS DOCID 1 3

带有前缀索引,Oracle 文本索引这些标记,如下所示的 6 新令牌类型的子字符串前缀:

令牌类型信息
令牌 0 POS DOCID 1 1
玩具 0 POS DOCID 1 3
T 6 DOCID 1 1 POS 收款机 3
6 DOCID 1 1 POS 收款机 3
托克 6 POS DOCID 1 1
6 POS DOCID 1 1
令牌 6 POS DOCID 1 1
玩具 6 POS DOCID 1 3

通配符搜索TO%现在都快,因为 Oracle 文本并没有扩展条款和合并的结果集。若要获取结果,Oracle 文本只需要阅读一下 (TO,6) 行。

prefix_length_min

指定索引的前缀的最小长度。默认值为 1。

例如,设置prefix_length_min 3 和prefix_length_max对 5 项指标为 3 到 5 个字符长之间的所有前缀。

注:

使用慢的方法的等价性扩张和合并搜索通配符搜索其模式是最小长度下方或上方的最大长度。
prefix_length_max

指定索引的前缀的最大长度。默认值为 64。

例如,设置prefix_length_min 3 和prefix_length_max对 5 项指标为 3 到 5 个字符长之间的所有前缀。

注:

使用慢的方法的等价性扩张和合并搜索通配符搜索其模式是最小长度下方或上方的最大长度。
wildcard_maxterms

在通配符 (%) 扩展中指定条件的最大数目。使用此参数可以保持在可接受的限度内的通配符查询性能。Oracle 文本返回一个错误,当通配符查询扩展超过这个数字。

BASIC_WORDLIST 示例

下面的示例演示使用BASIC_WORDLIST类型。

使模糊匹配和词干

以下示例启用词干和模糊匹配为英语。STEM_FUZZY_PREF的偏好将扩产的数目设置为允许的最大。此首选项也指示系统创建的子字符串的索引,以提高双截断搜索的性能。

begin 
  ctx_ddl.create_preference('STEM_FUZZY_PREF', 'BASIC_WORDLIST'); 
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_MATCH','ENGLISH');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_SCORE','0');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','FUZZY_NUMRESULTS','5000');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','SUBSTRING_INDEX','TRUE');
  ctx_ddl.set_attribute('STEM_FUZZY_PREF','STEMMER','ENGLISH');
end; 

若要在 SQL 中创建索引,请发出以下语句:

create index fuzzy_stem_subst_idx on mytable ( docs ) 
  indextype is ctxsys.context parameters ('Wordlist STEM_FUZZY_PREF');

使字符串的子字符串和前缀索引

下面的示例设置词库首选前缀和字符串的子字符串的索引。为前缀索引,它指定标记前缀 3 到 4 个字符长之间创建 Oracle 的文本:

begin 
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST'); 
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',3);
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 4);
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end

设置通配符扩展限制

使用 wildcard_maxterms 属性来设置最大允许条件中的通配符扩展。

--- create a sample table
drop table quick ;
create table quick 
  ( 
    quick_id number primary key, 
    text      varchar(80) 
  ); 

--- insert a row with 10 expansions for 'tire%'
insert into quick ( quick_id, text ) 
  values ( 1, 'tire tirea tireb tirec tired tiree tiref tireg tireh tirei tirej');
commit;

--- create an index using wildcard_maxterms=100
begin 
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST'); 
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 100) ;
end; 
/
create index wildcard_idx on quick(text)
    indextype is ctxsys.context 
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' - should work fine
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

--- now re-create the index with wildcard_maxterms=5

drop index wildcard_idx ;

begin 
    Ctx_Ddl.Drop_Preference('wildcard_pref'); 
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST'); 
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 5) ;
end; 
/

create index wildcard_idx on quick(text)
    indextype is ctxsys.context 
    parameters ('Wordlist wildcard_pref') ;

--- query on 'tire%' gives "wildcard query expansion resulted in too many terms"
select quick_id from quick
  where contains ( text, 'tire%' ) > 0;

存储类型

使用存储首选项来指定与文本索引关联的表的表空间和创建参数。该系统提供了一个称为BASIC_STORAGE的单个存储类型:

表 2-33 存储类型

类型描述
BASIC_STORAGE 用于指定数据库表和构成文本索引的索引的表空间和创建参数的索引类型。

BASIC_STORAGE

BASIC_STORAGE类型指定数据库表和构成文本索引的索引的表空间和创建参数。

您指定的子句添加到索引创建在内部CREATETABLECREATEINDEXi_index _clause) 的语句。您可以指定最允许的条款,例如存储、 LOB 存储或分区。但是,您不能指定索引组织的表子句。

请参见:

有关如何指定CREATETABLECREATEINDEX的语句的详细信息,请参阅Oracle 数据库 SQL 引用。

BASIC_STORAGE具有下列属性:

表 2-34 BASIC_STORAGE 属性

属性属性值
i_table_clause 博士 $注意$I 表创建的参数子句。指定存储和表空间的子句,以添加到内部CREATETABLE的语句的末尾。

我表是索引数据的表。

k_table_clause 博士 $注意$K 表创建的参数子句。指定存储和表空间的子句,以添加到内部CREATETABLE的语句的末尾。

K 表是键盘映射表。

r_table_clause 博士 $注意$R 表创建的参数子句。指定存储和表空间的子句,以添加到内部CREATETABLE的语句的末尾。

R 表是 rowid 表。

违约条款是: 'LOB(DATA) STORE AS (CACHE)'.

如果您修改此属性,始终包含此子句的良好表现。

n_table_clause 博士 $注意$N 表创建的参数子句。指定存储和表空间的子句,以添加到内部CREATETABLE的语句的末尾。

N 表是否定清单表。

i_index_clause 博士 $注意$X 索引创建的参数子句。指定存储和表空间的子句,以添加到内部的CREATE INDEX语句的末尾。违约条款是: 'COMPRESS 2'指示 Oracle 文本压缩此索引表。

如果您选择将默认值覆盖,Oracle 建议包括COMPRESS 2在你参数子句来压缩此表中,因为这种压缩可以节省磁盘空间和有助于提高查询性能。

p_table_clause 子字符串索引,如果已经启用了SUBSTRING_INDEXBASIC_WORDLIST的参数子句.

指定存储和表空间的子句,以添加到内部的 CREATE INDEX语句的末尾。P 表是表的一个索引组织表,所以您指定的存储子句必须适合于这种类型。

存储默认行为

默认情况下,不设置BASIC_STORAGE属性。在这种情况下,在索引所有者默认表空间中创建文本索引表。请考虑以下声明用户IUSER,没有BASIC_STORAGE属性设置:

create index IOWNER.idx on TOWNER.tab(b) indextype is ctxsys.context;

在此示例中,在IOWNER's默认表空间中创建文本索引。

存储示例

下面的示例指定索引表是在 1k 初始范围 foo的表空间中创建:

begin
ctx_ddl.create_preference('mystore', 'BASIC_STORAGE');
ctx_ddl.set_attribute('mystore', 'I_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'K_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'R_TABLE_CLAUSE',
                        'tablespace users storage (initial 1K) lob
                         (data) store as (disable storage in row cache)');
ctx_ddl.set_attribute('mystore', 'N_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
ctx_ddl.set_attribute('mystore', 'I_INDEX_CLAUSE',
                        'tablespace foo storage (initial 1K) compress 2');
ctx_ddl.set_attribute('mystore', 'P_TABLE_CLAUSE',
                        'tablespace foo storage (initial 1K)'); 
end;

节组类型

为了发行上的文档节的WITHIN查询,您必须创建分区组之前你定义你的部分。您在创建索引的参数子句中指定您的节组.

若要创建分区组,可以与 CTX_DDL 指定下面的组类型之一。CREATE_SECTION_GROUP程序:

表 2-35 节组类型

类型描述
NULL_SECTION_GROUP 当您定义没有节时或当您定义仅句子或段落节时,请使用此组类型。这是默认值。
BASIC_SECTION_GROUP 使用此组类型定义的开始和结束标记的形式<A></A>的部分.

注: 此组类型不支持输入如括号、 注释标记和属性。HTML_SECTION_GROUP用于这种类型的输入。

HTML_SECTION_GROUP 为 HTML 文档编制索引以及在 HTML 文档中定义章节,请使用此组类型。
XML_SECTION_GROUP 使用此组类型,XML 文档编制索引,并在 XML 文档中定义章节。要编制索引的所有部分必须手动都定义此组。
AUTO_SECTION_GROUP 使用此组类型自动创建 XML 文档中的每个开始标记/结束标记对区部分。从 XML 标记派生的节名称是区分大小写,如 XML。

对于具有属性的 XML 标记的属性节以自动创建。属性节是在窗体 tag@attribute 命名的。

停止部分、 空标签、 处理指令和注释未编制索引。

以下限制适用于自动节组:

  • 不能添加到自动分区组的区域、 字段或特殊路段。

  • 您可以定义一个停止部分,仅适用于一个特定的类型 ;那就是,如果你有两个不同的 XML Dtd,这两个国家使用名为FOO的标记,您可以定义(TYPE1)FOO将被停止,但(TYPE2)FOO,不会停止。

  • 索引标签,包括前缀和命名空间,长度不能超过 64 个字节。不索引标签比这更长的时间。

PATH_SECTION_GROUP 使用此组类型进行索引的 XML 文档。AUTO_SECTION_GROUP.

区别在于与此分区组,你可以做路径搜索与INPATHHASPATH的运营商。查询也是标记和属性名称区分大小写的。停止部分都是不允许的。

NEWS_SECTION_GROUP 使用此组用于定义根据 RFC 1036 新闻组格式文件中的节。

节组的例子

本示例显示 HTML 和 XML 文档中的节组的使用。

在 HTML 文档中创建分区组

下面的语句创建使用 HTML 组类型调用htmgroup的节组。

begin
ctx_ddl.create_section_group('htmgroup', 'HTML_SECTION_GROUP');
end;

您可以选择添加节到此组在 CTX_DDL包中,如CTX_DDL.ADD_SPECIAL_SECTION CTX_DDL.ADD_ZONE_SECTION要索引您的文档,可以如发出一份声明:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
parameters('filter ctxsys.null_filter section group htmgroup');

请参见:

上节组的详细信息,请参阅第 7 章,"CTX_DDL 包"

创建的 XML 文档中的节组

下面的语句创建称为xmlgroupXML_SECTION_GROUP组类型的节组。

begin
ctx_ddl.create_section_group('xmlgroup', 'XML_SECTION_GROUP');
end;

您可以选择添加节到此组在 CTX_DDL包中,如CTX_DDL.ADD_ATTR_SECTIONCTX_DDL.ADD_STOP_SECTION要索引您的文档,可以如发出一份声明:

create index myindex on docs(htmlfile) indextype is ctxsys.context 
parameters('filter ctxsys.null_filter section group xmlgroup');

请参见:

上节组的详细信息,请参阅第 7 章,"CTX_DDL 包"

自动切片的 XML 文档中

下面的语句创建称为autoAUTO_SECTION_GROUP组类型的节组。此分区组自动创建的部分,从 XML 文档中的标记。

begin
ctx_ddl.create_section_group('auto', 'AUTO_SECTION_GROUP');
end;

CREATE INDEX myindex on docs(htmlfile) INDEXTYPE IS ctxsys.context 
PARAMETERS('filter ctxsys.null_filter section group auto');

分类类型

本节介绍用于创建 CTX_CLS 首选的分类类型。火车和 CTXRULE 创建索引。支持以下两个分类器类型:

RULE_CLASSIFIER

使用 RULE_CLASSIFIER 类型创建生成的过程中,CTX_CLS 的查询规则的首选。火车和 CTXRULE 创作。将生成带有这种类型的规则实质上是查询字符串和可以容易地审查。此分类器所产生的查询可以使用与,不,或有关运算符。查询字段路段仅支持范围运算符。

这种类型具有下列属性:

表 2-36 RULE_CLASSIFIER 属性

属性数据类型默认最小值最大值描述
THRESHOLD 50 1 99 为规则生成指定阈值 (以百分比计算)。及其置信度大于阈值时,只有一条规则就是输出。
MAX_TERMS 100 20 2000 对于每个类相关术语列表形式规则。指定条件,可以选择为每个类的最大数目。
MEMORY_SIZE 500 10 4000 以 mb 为单位指定培训的内存使用情况。较大的值来提高性能。
NT_THRESHOLD F 0.001 0 0.90 指定一个门槛,术语的选择。有两个阈值指导两个步骤中选择相关的条款。此阈值控制的行为的第一步。在此步骤中,术语被评为候选术语供进一步审议在第二步。当发生频次的训练集的文档数的比率大于此阈值,选用了词。
TERM_THRESHOLD 10 0 100 为术语的选择百分比指定的阈值。此阈值控制第二步术语的选择。每个候选术语已计算暗示其相关性与给定类的数量。只有当在类中的所有候选术语的最大值及其量值比大于该阈值时,将为此类选择候选术语。
PRUNE_LEVEL 75 0 100 指定多少修剪生成的决策树更好的覆盖。较高的值意味着更具侵略性的修剪和所产生的规则会有大的覆盖范围,但少的准确性。

SVM_CLASSIFIER

使用 SVM_CLASSIFIER 类型创建规则生成的过程中,CTX_CLS 的首选项。火车,和 CTXRULE 创作。这种分类器类型表示分类的支持向量机方法,并以二进制格式生成规则。当你需要分类精度高,可使用此分类器类型。

这种类型具有下列属性:

表 2-37 SVM_CLASSIFIER 属性

属性名称数据类型默认最小值最大值描述
MAX_DOCTERMS 50 10 8192 指定表示一个文档的术语的最大数目。
MAX_FEATURES 3,000 1 100,000 指定的最大数目的特色。
THEME_ON B 空值 空值 指定对使用主题为特征。

分类与主题需要安装的知识库文章。知识库文章可能或不可能安装 Oracle 文本。在知识的基础上的详细信息,请参阅Oracle 文本应用程序开发人员指南.

TOKEN_ON B 真实 空值 空值 指定 TRUE,则使用常规令牌作为特征。
STEM_ON B 空值 空值 指定对茎的使用令牌作为特征。时为词法分析器拐弯处 INDEX_STEM 方面,这才是有效的。
MEMORY_SIZE 500 10 4000 以 mb 为单位指定近似的内存大小。
SECTION_WEIGHT 1 2 0 100 指定用于在字段部分中作为一个正常的术语添加一个术语发生乘数。例如,默认情况下,"< > < /A > 的猫"一词只猫是一个字段节用语,被视为一个正常的术语发生等于 2,但您可以指定它被当作一个正常的期限与重量最大为 100。索引策略指定的字段部分时, SECTION_WEIGHT才是有意义的。

群集类型

本节介绍用于创建CTX_CLS.CLUSTERING程序。

请参见:

有关群集的详细信息,请参阅"集群"第 6 章,"CTX_CLS 一揽子计划"以及Oracle 文本应用程序开发人员指南

KMEAN_CLUSTERING

此聚类的类型具有下列属性:

表 2-38 KMEAN_CLUSTERING 属性

属性名称数据类型默认最小值最大值描述
MAX_DOCTERMS 50 10 8192 指定不同的术语,表示一个文档的最大数目。
MAX_FEATURES 3,000 1 500,000 指定的最大数目的特色。
THEME_ON B 空值 空值 指定对使用主题为特征。

聚类分析的主题需要安装的知识库文章。知识库文章可能或不可能安装 Oracle 文本。在知识的基础上的详细信息,请参阅Oracle 文本应用程序开发人员指南.

TOKEN_ON B 真实 空值 空值 指定 TRUE,则使用常规令牌作为特征。
STEM_ON B 空值 空值 指定对茎的使用令牌作为特征。时为词法分析器拐弯处 INDEX_STEM 方面,这才是有效的。
MEMORY_SIZE 500 10 4000 以 mb 为单位指定近似的内存大小。
SECTION_WEIGHT 1 2 0 100 指定用于在字段部分中作为一个正常的术语添加一个术语发生乘数。例如,默认情况下,"< > < /A > 的猫"一词只猫是一个字段节用语,被视为一个正常的术语发生等于 2,但您可以指定它被当作一个正常的期限与重量最大为 100。索引策略指定的字段部分时, SECTION_WEIGHT才是有意义的。
CLUSTER_NUM 200 2 20000 指定叶簇生成的总量。

Stoplists

Stoplists 识别的文字在你的语言,不能被索引。在英语中,您还可以标识 stopthemes 不能被索引。默认情况下,该系统索引使用由系统提供的非索引,该字表对应于您的数据库语言的文本。

Oracle 文本为最常用的语言,包括英语、 法语、 德语、 西班牙语、 中文、 荷兰人和丹麦提供默认 stoplists。这些默认的 stoplists 包含只有字。

请参见:

关于提供的默认 stoplists 的详细信息,请参阅附录 E,"甲骨文文本提供 Stoplists".

多语言 Stoplists

您可以创建多语言 stoplists 持有特定于语言的字。当您使用MULTI_LEXER来索引包含在不同的语言如英语、 德语和日语文档的表,多语言的非索引字表很有用。

若要创建多语言非索引字表,请使用 CTX_DLL。CREATE_STOPLIST程序和指定的MULTI_STOPLIST的非索引字表类型。您添加的语言特定字与 CTX_DDL。ADD_STOPWORD.

在索引的时间,每个文档的语言列进行检查,并且只用于该语言字被淘汰。在查询时,会话语言设置确定积极的字,像它确定的积极的词法分析器时使用多的词法分析器。

创建 Stoplists

您可以创建您自己的 stoplists 使用 CTX_DLL。CREATE_STOPLIST程序。您可以使用此过程创建BASIC_STOPLIST为单一语言非索引字表,或者您可以创建多语言非索引字表为 MULTI_STOPLIST

当您创建您自己的非索引字表时,则必须指定在CREATEINDEX的参数子句中.

修改默认非索引字表

默认非索引字表总是被命名为CTXSYS。DEFAULT_STOPLIST可以使用以下过程来修改此非索引字表:

当您修改CTXSYS.DEFAULT_STOPLISTCTX_DDL软件包,您必须重新创建索引以使更改生效。

动态添加的字

您可以向默认值或自定义的非索引字表具有ALTER INDEX中动态地添加字。当您动态地添加 stopword 时,你需要不重新编制索引,因为这个词立即成为 stopword,从索引中删除。

注:

即使您可以动态添加索引的字,不能动态删除字。若要删除 stopword,您必须使用 CTX_DDL。REMOVE_STOPWORD,除去你的索引并重新创建它。

请参见:

章,"Oracle 文本 SQL 语句和运算符"变更索引.

系统定义的首选项

当您安装 Oracle 文本时,创建一些索引的偏好。可以在创建索引的参数子句中使用这些首选项,也可以定义你自己。

默认索引参数映射到一些这一节中描述的系统定义首选项。

请参见:

有关默认索引参数的详细信息,请参阅"默认索引参数" .

系统定义的首选项分为以下类别:

数据存储

本节讨论与数据存储首选项关联的类型。

CTXSYS。DEFAULT_DATASTORE

此首选项将使用DIRECT_DATASTORE类型。您可以使用此首选项为文本列中的文本存储在列中直接创建索引。

CTXSYS。FILE_DATASTORE

此首选项将使用FILE_DATASTORE类型。

CTXSYS。URL_DATASTORE

此首选项将使用URL_DATASTORE类型。

筛选器

本节讨论与过滤首选项关联的类型。

CTXSYS。NULL_FILTER

此首选项将使用NULL_FILTER类型。

CTXSYS。AUTO_FILTER

此首选项将使用AUTO_FILTER类型。

词法分析器

本节讨论与词法分析器首选项关联的类型。

CTXSYS。DEFAULT_LEXER

默认的 lexer 取决于在安装时所使用的语言。以下各节描述了CTXSYS.DEFAULT_LEXER为每种语言。

美国和英国的语言设置

如果你的语言是英语,此首选项将BASIC_LEXER使用index_themes属性被禁用。

丹麦语言设置

如果你的语言是丹麦语,这种偏好使用BASIC_LEXER与启用了以下选项:

  • 替换拼写 (alternate_spelling 属性设置为DANISH)

荷兰语言设置

如果你的语言是荷兰,这种偏好使用BASIC_LEXER与启用下列选项:

  • 复合索引 (composite的属性设置为DUTCH)

德国和德国 DIN语言设置

如果你的语言是德语,这种偏好使用BASIC_LEXER与启用下列选项:

  • 区分大小写的索引 (mixed_case属性启用)

  • 复合索引 (composite的属性设置为GERMAN)

  • 替换拼写 (alternate_spelling属性设置为GERMAN)

芬兰、 挪威、 瑞典的语言设置

如果你的语言是芬兰语、 挪威语或瑞典语,这种偏好使用BASIC_LEXER与启用了以下选项:

  • 替换拼写 (alternate_spelling 属性设置为SWEDISH)

日语语言设置

如果你的语言是日语,此首选项将使用JAPANESE_VGRAM_LEXER.

韩国语言设置

如果你的语言是朝鲜语,这种偏好使用KOREAN_MORPH_LEXER启用KOREAN_MORPH_LEXER的所有属性。

中国的语言设置

如果你的语言是简体中文或繁体中文,此首选项将使用CHINESE_VGRAM_LEXER.

其他语言

对于未在此节中列出的所有其他语言,这种偏好使用BASIC_LEXER没有属性集。

请参见:

若要了解有关这些选项的更多信息,请参见BASIC_LEXER .

CTXSYS。BASIC_LEXER

这种偏好使用BASIC_LEXER.

节组

本节讨论与节组首选项关联的类型。

CTXSYS。NULL_SECTION_GROUP

此首选项将使用NULL_SECTION_GROUP类型。

CTXSYS。HTML_SECTION_GROUP

此首选项将使用HTML_SECTION_GROUP类型。

CTXSYS。AUTO_SECTION_GROUP

此首选项将使用AUTO_SECTION_GROUP类型。

CTXSYS。PATH_SECTION_GROUP

此首选项将使用PATH_SECTION_GROUP类型。

非索引字表

本节讨论与非索引字表首选项关联的类型。

CTXSYS。DEFAULT_STOPLIST

此非索引字表首选项默认为您的数据库语言的非索引字表。

请参见:

停用词中提供的 stoplists 的完整列表,请参阅附录 E,"甲骨文文本提供 Stoplists".

CTXSYS。EMPTY_STOPLIST

此非索引字表已无话。

存储

这一节讨论了与存储首选项关联的类型。

CTXSYS。DEFAULT_STORAGE

此存储首选项使用BASIC_STORAGE类型。

单词表

本节讨论与单词表首选项关联的类型。

CTXSYS。DEFAULT_WORDLIST

此首选项为您的数据库语言使用语言的词干分析器。如果你的语言不列在表 2-32,此首选项默认为 NULL 的词干分析器和泛型的模糊匹配属性。

系统参数

本节介绍了 Oracle 文本系统参数。他们分为以下类别:

一般系统参数

当您安装 Oracle 文本之外的系统定义的首选项时,以下系统参数设置:

表 2-39 一般系统参数

系统参数描述
MAX_INDEX_MEMORY 这是可以在INDEXCREATEALTERINDEX参数子句中指定的最大索引内存.
DEFAULT_INDEX_MEMORY 这是默认的索引CREATEINDEXALTERINDEX所用的内存.
LOG_DIRECTORY 这是CTX_OUTPUT日志文件的目录。
CTX_DOC_KEY_TYPE 这是默认输入密钥类型,或ROWIDPRIMARY_KEYCTX_DOC程序。在安装时设置为ROWID

请参见: CTX_DOC. SET_KEY_TYPE.

您可以通过查询CTX_PARAMETERS视图查看系统默认值。您可以更改使用的 CTX_ADM.SET_PARAMETER程序的默认值。

默认索引参数

本节描述在创建上下文和 ctxcat 的索引时,您可以使用索引参数。

上下文索引参数

当您创建一个上下文索引时不指定首选项参数子句中创建索引时使用以下默认参数。每个默认参数命名系统定义的偏好,以用于数据存储、 过滤、 词法分析,等等。

表 2-40 默认上下文索引参数

参数时使用默认值
DEFAULT_DATASTORE 没有指定参数子句中CREATEINDEX的数据存储首选项. CTXSYS。DEFAULT_DATASTORE
DEFAULT_FILTER_FILE 没有指定参数子句CREATEINDEX,和满足下列条件之一的滤清器首选项是如此:
  • 您的文件存储在外部文件中 (BFILES) 或

  • 您指定一个数据存储首选项,使用FILE_DATASTORE

CTXSYS。AUTO_FILTER
DEFAULT_FILTER_BINARY 没有在CREATEINDEX和 Oracle 文本参数子句中指定的筛选器偏好检测文本列数据类型是RAWLONGRAWBLOB. CTXSYS。AUTO_FILTER
DEFAULT_FILTER_TEXT 没有在CREATEINDEX和 Oracle 文本参数子句中指定的筛选器偏好检测文本列数据类型是要么LONGVARCHAR2VARCHARCHAR,或CLOB. CTXSYS。NULL_FILTER
DEFAULT_SECTION_HTML 无节组CREATEINDEX,并满足下列条件之一时的参数子句中指定 true:
  • 您的数据存储区偏好使用URL_DATASTORE

  • 您的过滤器偏好使用AUTO_FILTER.

CTXSYS。HTML_SECTION_GROUP
DEFAULT_SECTION_TEXT 没有CREATEINDEX,和当你做时的参数子句中指定的节组不使用URL_DATASTOREAUTO_FILTER. CTXSYS。NULL_SECTION_GROUP
DEFAULT_STORAGE 没有指定参数子句中CREATEINDEX的存储首选项. CTXSYS。DEFAULT_STORAGE
DEFAULT_LEXER 没有指定参数子句中CREATEINDEX的 lexer 首选项. CTXSYS。DEFAULT_LEXER
DEFAULT_STOPLIST CREATEINDEX参数子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_WORDLIST CREATEINDEX参数子句中指定没有单词表偏好. CTXSYS。DEFAULT_WORDLIST

CTXCAT 索引参数

与创建索引创建一个 CTXCAT 索引和参数字符串中未指定任何参数时,就会使用下面的默认参数。CTXCAT 索引支持仅索引集、 词法分析器、 存储、 非索引字表和单词表参数。每个默认参数命名系统定义的首选项。

表 2-41 默认 CTXCAT 索引参数

参数时使用默认值
DEFAULT_CTXCAT_INDEX_SET 设置指定的INDEXCREATE参数子句中没有索引.  
DEFAULT_CTXCAT_STORAGE 没有指定参数子句中CREATEINDEX的存储首选项. CTXSYS。DEFAULT_STORAGE
DEFAULT_CTXCAT_LEXER 没有指定参数子句中CREATEINDEX的 lexer 首选项. CTXSYS。DEFAULT_LEXER
DEFAULT_CTXCAT_STOPLIST CREATEINDEX参数子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_CTXCAT_WORDLIST CREATEINDEX参数子句中指定没有单词表偏好.

请注意虽然您可以指定CTXCAT索引的单词表偏好,大多数的属性不适用,因为 catsearch 查询语言不支持通配符,模糊,和堵塞。唯一有用的属性是PREFIX_INDEX日本方面的数据。

CTXSYS。DEFAULT_WORDLIST

CTXRULE 索引参数

当你创建CTXRULE索引CREATEINDEX并在参数字符串中未指定任何参数,就会使用以下的默认参数。CTXRULE索引支持的 lexer、 存储、 非索引字表和单词表参数。每个默认参数命名系统定义的首选项。

表 2-42 默认 CTXRULE 索引参数

参数时使用默认值
DEFAULT_CTXRULE_LEXER 没有指定参数子句中CREATEINDEX的 lexer 首选项. CTXSYS。DEFAULT_LEXER
DEFAULT_CTXRULE_STORAGE 没有指定参数子句中CREATEINDEX的存储首选项. CTXSYS。DEFAULT_STORAGE
DEFAULT_CTXRULE_STOPLIST CREATEINDEX参数子句中指定的任何非索引字表. CTXSYS。DEFAULT_STOPLIST
DEFAULT_CTXRULE_WORDLIST CREATEINDEX参数子句中指定没有单词表偏好. CTXSYS.DEFAULT_WORDLIST
DEFAULT_CLASSIFIER No classifier preference is specified in parameter clause. RULE_CLASSIFIER

Viewing Default Values

You can view system defaults by querying the CTX_PARAMETERS view. For example, to see all parameters and values, you can issue:

SQL> SELECT par_name, par_value from ctx_parameters;

Changing Default Values

You can change a default value using the CTX_ADM.SET_PARAMETER procedure to name another custom or system-defined preference to use as default.

原文地址:https://www.cnblogs.com/xuxin-1989/p/4045124.html