在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
正在看的ORACLE教程是:Oracle9i的全文检索技术开发者网络Oracle。 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 >> [NextPage] 2 简单的示例 这里先给出一个简单示例说利用Oracle Text实现全文检索的方法与步骤,在后面在进行具体的说明。Orcale9i提供了Oracle Text Manager可以简化许多工作,所有在Oracle Text Manager中完成的工作,都可以在通过PL/SQL来实现。要使用Oracle Text,必须具有CTXAPP角色或者是CTXSYS用户。Oracle Text为系统管理员提供CTXSYS用户,为应用程序开发人员提供CTXAPP角色。 CTXSYS用户可执行以下任务:启动Oracle Text服务器,执行CTXAPP角色的所有任务。 具有CTXAPP角色的用户可执行以下任务: 创建索引,管理 Oracle Text 数据字典,包括创建和删除首选项,进行Oracle Text 查询,使用 Oracle Text PL/SQL程序包。 使用Oracle Text的步骤: (1)创建表来保存某些文档。该示例使用一个主关键字列来标识每个文档,使用一个小的VARCHAR2列来保存每个文档。 CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80)); (2)将两个示例文档置入该表: INSERT INTO docs VALUES (1,'the first doc'); INSERT INTO docs VALUES (2,'the second doc'); COMMIT; (3)使用Oracle Text Manager来创建和修改首选项,首选项将与索引相关联。 (4)使用Oracle Text Manager创建文本索引。另外,可以输入以下使用默认首选项的 SQL 语句: CREATE INDEX doc_index ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT; (5)使用 CONTAINS 函数,发出基于内容的文档查询。例如: SELECT id FROM docs WHERE CONTAINS (text, 'first') > 0; 这将在文本列包含单词 first (即文档1) 的 docs 中查找所有行。语句中的>0部分是有效的Oracle SQL所必需的,Oracle SQL不支持函数的布尔返回值。 以上只是一个简单的示例,旨在给出使用Oracle Text建立全文索引的完整步骤,归纳起来如下: (1)建表并装载文本(包含带有需要检索的文本字段) (2)配置索引 (3)建立索引 (4)发出查询 (5)索引维护:同步与优化(将在后面介绍) 3 文本装载 要实现文本的全文检索首先必须把正确的文本加载到数据库表中,默认的建立索引行为要求将文档装载在文本列中,尽管可以用其它方式 (包括文件系统和 URL 形式)存储文档 (在"数据存储"选项进行设置)。默认情况下,系统应该将文档装载在文本列中。文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE。注意,只有在将Oracle7系统移植到Oracle8的情况下才支持用LONG和LONG RAW 这两个相反的列类型存储文本。不能为列类型NCLOB、DATE和NUMBER建立索引。 关于文档格式,因为系统能为包括HTML、PDF、Microsoft Word和纯文本在内的大多数文档格式建立索引,可以将其中的任何文档类型装载到文本列中(在"过滤器"选项中设置)。有关所支持的文档格式的详细信息,可以参阅Oracle Text User's Guide and Reference 中的附录"Supported Filter Formats"。 装载方法主要有以下几种: (1)SQL INSERT 语句 (2)ctxload 可执行文件 (3)SQL*Loader (4)从 BFILE 中装载 LOB 的 DBMS_LOB.LOADFROMFILE() PL/SQL 过程 (5)Oracle Call Interface
[NextPage] 4 为文本建立索引 文本装入文本列后,就可以创建Oracle Text索引。文档以许多不同方案、格式和语言存储。因此,每个 Oracle Text 索引有许多需要设置的选项,以针对特定情况配置索引。创建索引时,Oracle Text可使用若干个默认值,但在大多数情况下要求用户通过指定首选项来配置索引。 每个索引的许多选项组成功能组,称为"类",每个类集中体现配置的某一方面,可以认为这些类就是与文档数据库有关的一些问题。例如:数据存储、过滤器、词法分析器、相关词表、存储等。 每个类具有许多预定义的行为,称之为对象。每个对象是类问题可能具有的答案,并且大多数对象都包含有属性。通过属性来定制对象,从而使对索引的配置更加正在看的ORACLE教程是:Oracle9i的全文检索技术开发者网络Oracle。多变以适应于不同的应用。 (1)存储(Storage)类 存储类指定构成Oracle Text索引的数据库表和索引的表空间参数和创建参数。它仅有一个基本对象:BASIC_STORAGE,其属性包括:I_Index_Clause、I_Table_Clause、K_Table_Clause、N_Table_Clause、P_Table_Clause、R_Table_Clause。 (2)数据存储(Datastore)类 数据存储:关于列中存储文本的位置和其他信息。默认情况下,文本直接存储到列中,表中的每行都表示一个单独的完整文档。其他数据存储位置包括存储在单独文件中或以其 URL 标识的 Web 页上。七个基本对象包括:Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore 、URL_Datastore、User_Datastore,。 (3)文档段组(Section Group)类 文档段组是用于指定一组文档段的对象。必须先定义文档段,然后才能使用索引通过 WITHIN 运算符在文档段内进行查询。文档段定义为文档段组的一部分。包含七个基本对象:AUTO_SECTION_GROUP、BASIC_SECTION_GROUP、HTML_SECTION_GROUP、NEWS_SECTION_GROUP、NULL_SECTION_GROUP、XML_SECTION_GROUP、PATH_SECTION_GROUP。 (4)相关词表(Wordlist)类 相关词表标识用于索引的词干和模糊匹配查询选项的语言,只有一个基本对象BASIC_WORDLIST,其属性有:Fuzzy_Match、Fuzzy_Numresults、Fuzzy_Score、Stemmer、Substring_Index、Wildcard_Maxterms、Prefix_Index、Prefix_Max_Length、Prefix_Min_Length。 (5)索引集(Index Set) 索引集是一个或多个Oracle 索引 (不是Oracle Text索引) 的集合,用于创建 CTXCAT类型的Oracle Text索引,只有一个基本对象BASIC_INDEX_SET。 (6)词法分析器(Lexer)类 词法分析器类标识文本使用的语言,还确定在文本中如何标识标记。默认的词法分析器是英语或其他西欧语言,用空格、标准标点和非字母数字字符标识标记,同时禁用大小写。包含8个基本对象:BASIC_LEXER、CHINESE_LEXER、CHINESE_VGRAM_LEXER、JAPANESE_LEXER、JAPANESE_VGRAM_LEXER、KOREAN_LEXER、KOREAN__MORPH_ LEXER、MULTI_LEXER。 (7)过滤器(Filter)类 过滤器确定如何过滤文本以建立索引。可以使用过滤器对文字处理器处理的文档、格式化的文档、纯文本和 HTML 文档建立索引,包括5个基本对象:CHARSET_FILTER、INSO_FILTER INSO、NULL_FILTER、PROCEDURE_FILTER、USER_FILTER。 (8)非索引字表(Stoplist)类 非索引字表类是用以指定一组不编入索引的单词 (称为非索引字)。有两个基本对象:BASIC_STOPLIST (一种语言中的所有非索引字) 、 MULTI_STOPLIST (包含多种语言中的非索引字的多语言非索引字表)。 5 查询 建立了索引,就可以使用 SELECT 语句中的 CONTAINS 运算符发出文本查询。使用 CONTAINS 可以进行两种查询:单词查询和ABOUT查询。 5.1 词查询示例 词查询是对输入到 CONTAINS 运算符中单引号间的精确单词或短语的查询。在以下示例中,我们将查找文本列中包含 oracle 一词的所有文档。每行的分值由使用标签 1 的 SCORE 运算符选定: SELECT SCORE(1) title from news WHERE CONTAINS(text, 'oracle', 1) > 0; 在查询表达式中,可以使用 AND 和 OR 等文本运算符来获取不同结果。还可以将结构性谓词添加到 WHERE 子句中。可以使用 count(*)、CTX_QUERY.COUNT_HITS 或 CTX_QUERY.EXPLAIN 来计算查询的命中 (匹配) 数目。 5.2 ABOUT查询示例 在所有语言中,ABOUT查询增加了某查询所返回的相关文档的数目。在英语中,ABOUT 查询可以使用索引的主题词组件,该组件在默认情况下创建。这样,运算符将根据查询的概念返回文档,而不是仅依据所指定的精确单词或短语。例如,以下查询将查找文本列中关于主题 politics 的所有文档,而不是仅包含 politics 一词的文档: SELECT SCORE(1) title from news WHERE CONTAINS(text, 'about(politics)', 1) > 0; [NextPage]
6 显示满足查询条件的文档 Set ServerOutput on declare v_job number; begin Dbms_Job.Submit ( job => v_job, what => 'sync;', next_date => sysdate, /* default */ interval => 'sysdate + 1/720' /* = 1 day / ( 24 hrs * 30 min) = 2 mins */ ); Dbms_Job.Run ( v_job ); Dbms_Output.Put_Line ( 'Submitted as job # ' || to_char ( v_job ) ); end; /> job的SYSDATE + (1/720)是指每隔2分钟同步一次。具体的时间间隔,可以根据自己的应用的需要而定。 8 小结 文本对于各种规模的公司、机构组织来说,都是包含众多丰富信息的最有效载体,Oracle Text的推出,标志着Oracle提供了一套崭新的技术,可以便捷安全的用于管理企业的文本信息。Oracle Text使应用程序开发者可以透明地将全文检索能力加入到基于SQL的应用程序中,Oracle Text也是其他Oracle产品的核心组件,比如Oracle9iAS Portal,Oracle eBusiness Suite,Oracle Ultra Search和Oracle Internet File System等。灵活运用Oracle Text提供的全文检索技术,就可以使自己的应用具备强大的全文检索能力。 上一页 |
请发表评论