Oracle的全文检索技术_第1页
Oracle的全文检索技术_第2页
Oracle的全文检索技术_第3页
Oracle的全文检索技术_第4页
Oracle的全文检索技术_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.欢迎交流: HYPERLINK mailto:wsf111sina wsf111sina或seervip.163 :.;Oracle的全文检索技术Oracle不断努力于全文检索技术的研讨,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术曾经非常完美,Oracle Text使Oracle9i具备了强大的文本检索才干和智能化的文本管理才干。Oracle Text是Oracle9i采用的新称号,在Oracle8/8i中它被称作Oracle interMedia Text。运用Oracle Text,可以方便而有效地利用规范的SQL工具来构建基于文本的新的开发工具或对现有

2、运用程序进展扩展。运用程序开发人员可以在任何运用文本的Oracle数据库运用程序中充分利用Oracle Text搜索,运用范围可以是现有运用程序中可搜索的注释字段,也可是实现涉及多种文档格式和复杂搜索规范的大型文档管理系统。Oracle Text支持Oracle数据库所支持的大多数言语的根本全文搜索功能。虽然大多数大型数据库都支持全文检索,但Oracle在这方面无疑是最出色的。Oracle能搜索多种格式的文档,如Word,Execl,PowerPoint,Html,PDF等等。但在运用中也发现有遗憾的地方,Oracle Text无论运用何种过滤器INSO_FILTER或NULL_FILTER及

3、何种词法分析器BASIC_LEXER, CHINESE_VGRAM_LEXER还是CHINESE_LEXER都不能检索出中文内容的文本文档TXT,RTF。1 Oracle Text的体系架构以下图是Oracle Text的体系架构:图1 Oracle Text的体系架构Oracle Text 索引文档时所运用的主要逻辑步骤如下:1数据存储逻辑搜索表的一切行,并读取列中的数据。通常,这只是列数据,但有些数据存储运用列数据作为文档数据的指针。例如,URL_DATASTORE 将列数据作为 URL 运用。假设对本地文件进展检索,只需指定DATASTORE中FILE_DATASTORE参数为文件的途径

4、即可。2过滤器提取文档数据并将其转换为文本表示方式。存储二进制文档 (如 Word 或 Acrobat 文件) 时需求这样做。过滤器的输出不用是纯文本格式 - 它可以是 XML 或 HTML 之类的文本格式。3分段器提取过滤器的输出信息,并将其转换为纯文本。包括 XML 和 HTML 在内的不同文本格式有不同的分段器。转换为纯文本涉及检测重要文档段标志、移去不可见的信息和文本重新格式化。4词法分析器提取分段器中的纯文本,并将其拆分为不延续的标志。既存在空白字符分隔言语运用的词法分析器,也存在分段复杂的亚洲言语运用的专门词法分析器。5索引引擎提取词法分析器中的一切标志、文档段在分段器中的偏移量以

5、及被称为非索引字的低信息含量字列表,并构建反向索引。倒排索引存储标志和含有这些标志的文档。归纳起来如下:1建表并装载文本包含带有需求检索的文本字段2配置索引3建立索引4发出查询5索引维护:同步与优化将在后面引见文本装载要实现文本的全文检索首先必需把正确的文本加载到数据库表中,默许的建立索引行为要求将文档装载在文本列中,虽然可以用其它方式 (包括文件系统和 URL 方式)存储文档 (在数据存储选项进展设置)。默许情况下,系统应该将文档装载在文本列中。文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE。留意,只需在将Oracle7系统移植到Oracle8的情况下才支持用LONG

6、和LONG RAW 这两个相反的列类型存储文本。不能为列类型NCLOB、DATE和NUMBER建立索引。关于文档格式,由于系统能为包括HTML、PDF、Microsoft Word和纯文本在内的大多数文档格式建立索引,可以将其中的任何文档类型装载到文本列中(在过滤器选项中设置)。有关所支持的文档格式的详细信息,可以参阅Oracle Text Users Guide and Reference 中的附录Supported Filter Formats。装载方法主要有以下几种:1SQL INSERT 语句2ctxload 可执行文件3SQL*Loader4从 BFILE 中装载 LOB 的 DBM

7、S_LOB.LOADFROMFILE() PL/SQL 过程5Oracle Call Interface建立索引文本装入文本列后,就可以创建Oracle Text索引。文档以许多不同方案、格式和言语存储。因此,每个 Oracle Text 索引有许多需求设置的选项,以针对特定情况配置索引。创建索引时,Oracle Text可运用假设干个默许值,但在大多数情况下要求用户经过指定首选项来配置索引。每个索引的许多项选择项组胜利能组,称为类,每个类集中表达配置的某一方面,可以以为这些类就是与文档数据库有关的一些问题。例如:数据存储、过滤器、词法分析器、相关词表、存储等。每个类具有许多预定义的行为,称之

8、为对象。每个对象是类问题能够具有的答案,并且大多数对象都包含有属性。经过属性来定制对象,从而使对索引的配置更加多变以顺应于不同的运用。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类数据存储:关于列中存储文本的位置和其他信息。默许情况下,文本直接存储到列中,表中的每行都表示一

9、个单独的完好文档。其他数据存储位置包括存储在单独文件中或以其 URL 标识的 Web 页上。七个根本对象包括:Default_Datastore、Detail_Datastore、Direct_Datastore、File_Datastore、Multi_Column_Datastore 、URL_Datastore、User_Datastore,。3文档段组Section Group类文档段组是用于指定一组文档段的对象。必需先定义文档段,然后才干运用索引经过 WITHIN 运算符在文档段内进展查询。文档段定义为文档段组的一部分。包含七个根本对象:AUTO_SECTION_GROUP、BASI

10、C_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_M

11、in_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、KOR

12、EAN_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 (包含多

13、种言语中的非索引字的多言语非索引字表)。查询建立了索引,就可以运用 SELECT 语句中的 CONTAINS 运算符发出文本查询。运用 CONTAINS 可以进展两种查询:单词查询和ABOUT查询。51 词查询例如词查询是对输入到 CONTAINS 运算符中单引号间的准确单词或短语的查询。在以下例如中,我们将查找文本列中包含 oracle 一词的一切文档。每行的分值由运用标签 1 的 SCORE 运算符选定:SELECT SCORE(1) title from news WHERE CONTAINS(text, oracle, 1) 0;在查询表达式中,可以运用 AND 和 OR 等文本运算符

14、来获取不同结果。还可以将构造性谓词添加到 WHERE 子句中。可以运用 count(*)、CTX_QUERY.COUNT_HITS 或 CTX_QUERY.EXPLAIN 来计算查询的命中 (匹配) 数目。52 ABOUT查询例如在一切言语中,ABOUT查询添加了某查询所前往的相关文档的数目。在英语中,ABOUT 查询可以运用索引的主题词组件,该组件在默许情况下创建。这样,运算符将根据查询的概念前往文档,而不是仅根据所指定的准确单词或短语。例如,以下查询将查找文本列中关于主题 politics 的一切文档,而不是仅包含 politics 一词的文档:SELECT SCORE(1) title

15、from news WHERE CONTAINS(text, about(politics), 1) 0;索引维护索引建好后,假设表中的数据发生变化,比如添加或修正了记录,怎样办?由于对表所发生的任何DML语句,都不会自动修正索引,因此,必需定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。在索引建好后,可以在该用户下查到Oracle自动产生了以下几个表:假设索引名为myindex:DR$myindex$I,DR$myindex$K,DR$myindex$R,DR$myindex$N其中以I表最重要,可以查询一下该表:select token_text, token_c

16、ount from DR$ myindex $I where rownumcreate user mini identified by mini;SQLalter user mini default tablespace EXAMPLE;SQL grant connect,resource to mini;SQL grant ctxapp to mini;SQL alter user mini default role all;创建表:用mini用户登录。SQL create table mytest ( tid number primary key, fname varchar2(100),

17、 btext BLOB)录入数据:用system用户登录-创建目录(数据库效力器)SQL create or replace directory BLOB_FILE_DIR as d:test;SQL grant read on directory BLOB_FILE_DIR to mini;用mini用户登录-创建过程CREATE OR REPLACE PROCEDURE insert_file (TID number,FILENAME VARCHAR2) ISF_LOB BFILE;B_LOB BLOB;BEGININSERT INTO MYTEST(tid,fname,btext)VAL

18、UES (TID,FILENAME,EMPTY_BLOB () RETURN btext INTO B_LOB;F_LOB:= BFILENAME (BLOB_FILE_DIR, FILENAME);DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY);DBMS_LOB.LOADFROMFILE (B_LOB,F_LOB,DBMS_LOB.GETLENGTH (F_LOB),1,1);DBMS_LOB.FILECLOSE (F_LOB);COMMIT;END;SQL exec insert_file(1,test.doc);设置索引参考项SQL b

19、eginctx_ddl.create_preference(cnlex,CHINESE_VGRAM_LEXER);ctx_ddl.create_preference(mywordlist, BASIC_WORDLIST);ctx_ddl.set_attribute(mywordlist,PREFIX_INDEX,TRUE);ctx_ddl.set_attribute(mywordlist,PREFIX_MIN_LENGTH,1);ctx_ddl.set_attribute(mywordlist,PREFIX_MAX_LENGTH, 5);ctx_ddl.set_attribute(myword

20、list,SUBSTRING_INDEX, YES);end;(假设数据库的字符集是UTF8,建议运用CHINESE_LEXER词法分析器)-查看自定义的参考项SQLselect * from ctx_user_preferences;创建索引SQLcreate index idx_mytest on mytest(btext) indextype is ctxsys.context parameters (DATASTORE CTXSYS.DIRECT_DATASTORE FILTER CTXSYS.INSO_FILTER LEXER MINILEX WORDLIST MINI.MYWORDLIST);可以运用ctxcat索引类型,但好似不支持BLOB型-查看SQLselect * from dr$idx_mytest$I; SQLselect * from mytest where contains(btext

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论