登陆注册
19122000000021

第21章 Oracle的全文搜索(1)

本章要点

本章介绍基于Oracle数据库的全文搜索技术,这是在Java开发领域的一门重要技术,使用这项技术可以解决企业级的全文搜索问题。

5.1Oracle简介

Larry Ellison是Oracle公司的董事长兼执行总裁,1977年在加利福尼亚的Redwood,他和Robert Minor一起建立了Oracle公司。Oracle是在IBM的System R(关系模型)的基础上,推出了第一个关系型数据管理系统,这也是第一个使用IBM的结构化查询语言(SQL)的关系型数据库管理系统。

Oracle数据库系统最早于1979年推出(第一版的Oracle数据库是两个人写成的)。1984年完成Oracle PC版。1997年发布Oracle8,1999年推出Oracle8i。2001年,Oracle公司在Oracle8i数据库的基础上推出了新一代基于Internet电子商务构架的网络数据库解决方案Oracle9i,2004年推出了Oracle10g。

Oracle数据库目前是世界上最好的数据库,使用Oracle数据库是一种享受。

Oracle9i是目前中国使用得最多的数据库。它提供了灵活多样的数据分区功能,一个分区可以是一个大型表,也可以是索引易于管理的小块,可以根据数据的取值分区。它有效地提高了系统操作能力及数据可用性,减少I/O瓶颈。它还对并行处理进行了改进,在位图索引、查询、排序、连接和一般索引扫描等操作中引入并行处理,提高了单个查询的并行度。Oracle8通过并行服务器(Parallel Server Option)来提高系统的可用性。

Oracle9i提供了自动备份和恢复功能,改进了对大规模和更加细化的分布式操作系统的支持,如加强了SQL操作复制的并行性。为了帮助客户有效地管理整个数据库和应用系统,Oracle还提供了企业管理系统(Oracle Enterprise Manager),数据库管理员可以从一个集中控制台拖放式图形用户界面管理Oracle的系统环境。

Oracle9i通过安全服务器中提供的安全服务,加强了Oracle Web服务器中原有的用户验证和用户管理。

Oracle9i可以运行于目前所有主流平台上,如SUN Solarise,SequentDynix/PTX,IntelNT,HP UX,DEC UNIX,IBMAIX和SP等。Oracle9i的异构服务为同其他数据源及使用SQL和PL/SQL的服务进行通信提供了必要的基础设施。

Oracle公司除了提供完美的数据库系统外,也提供完整的解决方案的套件,它是一全面集成的电子商务套件。

Oracle数据库产品是当前数据库技术的典型代表。

Microsoft公司花了5年时间,让1000人去开发了SQL Server2005,但笔者认为它和Oracle相比,差得太远了。

5.2Oracle的全文搜索

Oracle一直致力于全文检索技术的研究,当Oracle9i Rlease2发布之时,Oracle数据库的全文检索技术已经非常完美,Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。

Oracle Text是Oracle9i采用的新名称,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的名称是OracleConTextCartridge。使用Oracle9i和Oracle Text,可以方便而有效地利用标准的SQL工具来构建基于文本的新的开发工具或对现有应用程序进行扩展。应用程序开发人员可以在任何使用文本的Oracle数据库应用程序中充分利用OracleText搜索,应用范围可以是现有应用程序中可搜索的注释字段,也可是实现涉及多种文档格式和复杂搜索标准的大型文档管理系统。Oracle Text支持Oracle数据库所支持的大多数语言的基本全文搜索功能。

文本对于各种规模的公司、机构组织来说,都是包含众多丰富信息的最有效载体,OracleText的推出,标志着Oracle提供了一套崭新的技术,可以便捷安全地用于管理企业的文本信息。Oracle Text使应用程序开发者可以透明地将全文检索能力加入到基于SQL的应用程序中,Oracle Text也是其他Oracle产品的核心组件,比如Oracle9iAS Portal,Oracle eBusinessSuite,Oracle Ultra Search和Oracle Internet File System等。灵活运用Oracle Text提供的全文检索技术,就可以使自己的应用具备强大的全文检索能力。

Oracle9i之前版本的Oracle数据库为了启用全文搜索功能,必须手工安装组件。但是,鉴于Oracle9i的应用已经非常普及,这里就不介绍手工安装Oracle全文搜索组件的方法了。

5.2.1Oracle Text的索引

1.建立Oracle Text索引的步骤

与SQL Server的全文搜索方法类似,Oracle也要先对数据建立索引,然后才能执行搜索。

建立Oracle Text索引文档时所使用的主要逻辑步骤如下。

①数据存储逻辑(DATASTORE)搜索表的所有行,并读取列中的数据。通常,这只是列数据,但有些数据存储使用列数据作为文档数据的指针。例如,URLDATASTORE将列数据作为URL使用。

②过滤器(FILTER)提取文档数据并将其转换为文本表示方式。存储二进制文档(如Word或PDF文件)时需要这样做。过滤器的输出不必是纯文本格式,它可以是XML或HTML之类的文本格式。

③分段器(SECTIONER)提取过滤器的输出信息,并将其转换为纯文本。包括XML和HTML在内的不同文本格式有不同的分段器。转换为纯文本涉及检测重要文档段标记、移去不可见的信息和文本重新格式化。

④词法分析器(Lexer)提取分段器中的纯文本,并将其拆分为不连续的标记。既存在空白字符分隔语言使用的词法分析器,也存在分段复杂的亚洲语言使用的专门词法分析器。

⑤索引引擎(Indexing Engine)提取词法分析器中的所有标记、文档段在分段器中的偏移量,以及被称为非索引字的低信息含量字列表,并构建反向索引。倒排索引存储标记和含有这些标记的文档。

2.Oracle Text索引的类及其对象

Oracle Text的每个索引的许多选项组成功能组,称为“类”,每个类集中体现配置的某一方面,可以认为这些类就是与文档数据库有关的一些问题。例如:数据存储、过滤器、词法分析器、相关词表、存储等。

每个类具有许多预定义的行为,称为对象。每个对象是类问题可能具有的答案,并且大多数对象都包含有属性。通过属性来定制对象,从而使对索引的配置更加多变以适应于不同的应用。

(1)存储(Storage)类

存储类指定构成Oracle Text索引的数据库表和索引的表空间参数和创建参数。它仅有一个基本对象:BASIC STORAGE,其属性包括:I IndexClause,I TableClause,KTableClause,N TableClause,P TableClause和R TableClause。

(2)数据存储(Datastore)类

数据存储是指关于列中存储文本的位置和其他信息。默认情况下,文本直接存储到列中,表中的每行都表示一个单独的完整文档。其他数据存储位置包括存储在单独文件中或以其URL标识的Web页上。其七个基本对象包括:DefaultDatastore,DetailDatastore,DirectDatastore,FileDatastore,MultiColumnDatastore,URLDatastore和UserDatastore。

(3)文档段组(Section Group)类

文档段组是用于指定一组文档段的对象。必须先定义文档段,然后才能使用索引通过WITHIN运算符在文档段内进行查询。文档段定义为文档段组的一部分,包含七个基本对象:AUTO SECTION GROUP,BASIC SECTION GROUP,HTML SECTIONGROUP,NEWS SECTION GROUP,NULL SECTION GROUP,XML SECTIONGROUP和PATH SECTION GROUP。

(4)相关词表(Wordlist)类

相关词表标识用于索引的词干和模糊匹配查询选项的语言,它只有一个基本对象BASICWORDLIST,其属性有:Fuzzy Match,Fuzzy Numresults,Fuzzy Score,Stemmer,SubstringIndex,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,KOREANMORPH LEXER和MULTI LEXER。

(7)过滤器(Filter)类

过滤器确定如何过滤文本以建立索引。可以使用过滤器对文字处理器处理的文档、格式化的文档、纯文本和HTML文档建立索引,包括5个基本对象:CHARSET FILTER,INSOFILTER INSO,NULL FILTER,PROCEDURE FILTER,USER FILTER。

(8)非索引字表(Stoplist)类

非索引字表类是用以指定一组不编入索引的单词(称为非索引字)。有两个基本对象:BASICSTOPLIST(一种语言中的所有非索引字)、MULTI STOPLIST(包含多种语言中的非索引字的多语言非索引字表)。

5.2.2Oracle Text的搜索流程

使用Oracle Text技术进行搜索的基本流程如下。

1.装载文本

(1)文本列类型

默认的建立索引行为要求将文档装载在文本列中,尽管可以用其他方式(包括文件系统和URL形式)存储文档。文本列可以是VARCHAR2、CLOB、BLOB、CHAR或BFILE类型。

注意,只有在将Oracle7系统移植到Oracle8的情况下才支持用LONG和LONG RAW这两个相反的列类型存储文本。不能为列类型NCLOB,DATE和NUMBER建立索引。

(2)文档格式类型

因为系统能为包括HTML,PDF,Microsoft Word和纯文本在内的大多数文档格式建立索引,所以可以将其中的任何文档类型装载到文本列中。有关所支持的文档模式的详细信息,请参阅Oracle Text User’s Guide and Reference中的附录C:“Supported Filter Formats”。

(3)装载数据的方法

可以使用各种方法装载数据,包括:SQL INSERT语句,ctxload可执行文件,SQL*Loader从BFILE中装载LOB的DBMS LOB.LOADFROMFILE()PL/SQL过程,OracleCallInterface。

2.为文本建立索引

文本装入文本列后,就可以创建Oracle Text索引。创建索引并接受所有选项的默认值后,系统将为所有语言执行以下操作。

假定要建立索引的文本将直接存储在文本列中。检测列类型,并对二进制列类型进行过滤。过滤操作支持多数文档格式。如果列为纯文本格式,系统将不进行过滤。注意:要在系统中正确执行文档过滤操作,必须确保已将环境正确设置为支持Inso过滤器。有关配置环境以使用Inso过滤器的详细信息,请参阅Oracle Text User’s Guide and Reference。

同类推荐
  • 语文新课标课外必读第八辑——365夜故事

    语文新课标课外必读第八辑——365夜故事

    国家教育部颁布了最新《语文课程标准》,统称新课标,对中、小学语文教学指定了阅读书目,对阅读的数量、内容、质量以及速度都提出了明确的要求,这对于提高学生的阅读能力,培养语文素养,陶冶情操,促进学生终身学习和终身可持续发展,对于提高广大人民的文学素养具有极大的意义。
  • 语文新课标课外必读第九辑—一林肯传

    语文新课标课外必读第九辑—一林肯传

    国家教育部颁布了最新《语文课程标准》,统称新课标,对中、小学语文教学指定了阅读书目,对阅读的数量、内容、质量以及速度都提出了明确的要求,这对于提高学生的阅读能力,培养语文素养,陶冶情操,促进学生终身学习和终身可持续发展,对于提高广大人民的文学素养具有极大的意义。
  • 世界历史经典故事300

    世界历史经典故事300

    它的特点一个是用一连串的故事将世界几千年的历史串在一起,既有细节描写,又有人物刻画,读起来生动有趣;另一个是文笔简洁,用不长的篇幅就囊括了历史上所有的重要事件,让广大中小学生对世界历史有一个基本的把握。很显然,如果想为中小学生挑一本历史读物的话,本书就是首选。
  • 快乐之钟,在此刻敲响

    快乐之钟,在此刻敲响

    自信是成功的前提,快乐是生活调味剂。本书所选取的小故事不仅充满了幽默色彩,还流露出机敏智慧的闪光。阅读本书,既能培养孩子的幽默感,使其眼中的世界变得五彩缤纷,充满乐趣,又能让孩子树立自信,从而坚强地迎接人生中的挑战。
  • 小学生最喜欢看的好词好句好段大全

    小学生最喜欢看的好词好句好段大全

    小朋友们,你们是否还在为写不出妙语连珠的句子而烦恼?是否还在为自己的作文没有亮点而焦急?这里有你需要的好词、好句、好段,这里会让你的作文增光生色,这里会让你的作文与众不同,孩子们,还等什么,来吧,来这里寻找你所需要的作文素材吧!《小学生最喜欢的系列丛书:小学生最喜欢看的好词好句好段大全》分为写人篇、状物篇、写景篇、叙事篇、社会热点与爱心活动五部分,语言生动、形象,对提高孩子的写作能力大有裨益。
热门推荐
  • 帝女风华

    帝女风华

    大婚之日,她和他的孩子化为血水,而他却要帮别的女人登上最尊贵的位子!死都不甘心,她诅咒他们,若有来生,必受地狱之苦!她重生回到过去,她要重新来过,在别人夺取她的男人、她的骨肉之前让自己变得更强大,更加光芒万丈,拥有绝代的风华!
  • 最新潮的爱

    最新潮的爱

    没有一种爱可以简简单单,但有一种爱可以绝对包容;没有一种人天生就很完美,但有一种人可以为你改变。在爱情的旅途中,有一天你会突然发现,你只能,最后一次说:我爱你!
  • 重塑韩娱天下

    重塑韩娱天下

    文章修订,全文大改。暂停更新、(情节设计出现严重纰漏,为了文章质量,为了保证读者阅读质量,作者不会就这糊弄事继续更新。修改期间一天四五章左右,大改要一个星期时间。)新文章将延续重生剧情,不过主角将变成才出道的演员金秀贤。以一个演员的视角去写。女主不确定,可能是少时林允儿,也可能是别人,但不会是单一女主。
  • 走私在异界

    走私在异界

    史上最伟大的走私犯。史上最强悍的穿越。造就了一位史无前例的纨绔贵族子。这位杜蕾斯联盟偏远一隅的小贵族家拖油瓶,大难不死,果然必有后福,萝莉妹子,圣洁圣女,贵族美妇,傲娇公主,野性兽女……当然,还有最牛气冲天叉霸天下,风光无限爽快到暴的主角……所有的权贵称颂他的功绩,所有的商贾赞誉他的天才,所有的女人痴迷他的伟岸,所有的信徒说他是神圣之主之后的第二尊神明。罗蒂雷特大陆有史以来最无敌的走私大王,地下世界的教父,新世界的开辟者,米安·弥罗斯说,这是一曲独属于我的华丽诗章。无魔法无斗气不修练的异界,一样爽到掉渣。2011,你走私了吗?书友群NO.1:137027560,鸣谢信徒。
  • 征服太空之路(神秘的太空世界丛书)

    征服太空之路(神秘的太空世界丛书)

    《征服太空之路》从不同角度、不同层面向你展开一幅幅美丽的太空画面,让你在学到有关太空知识的同时也能领略到独特的太空美,相信定会使你受益匪浅。现在就开始这次意义深远的太空之旅吧。《征服太空之路》对从人类最初的飞翔之梦到未来飞行器的发展趋势都作了详细的介绍。
  • 百里秋枫,只为一人

    百里秋枫,只为一人

    醉枫下的一句誓言,三世轮回,三世情劫,世世不得善终!当天命被更改,三世重新来过,你又拿什么来偿还......
  • 异世之反恐特战队

    异世之反恐特战队

    本文讲述的是一个中国反恐特战队员身死后灵魂穿越到异界,并附身在某个英雄世家的一个废物身上的故事.在那个陌生的世界里,曾经作为一名军人的他将如何纵横于那个战乱频频的大陆?置身于战乱频频的异界,他将演绎一个什么样的故事?当铁血的军人,遭遇美人的柔情时,他又将如何去面对?当现代的军事理念,登上魔法大陆的舞台后,它会给这个世界带来什么样的结果?本书中集魔法武技于一体,聚军事政治言情推理于一身,故事情节曲折动人,对白幽默风趣,打斗场面华丽壮观,适合各年龄段的男女大大们阅读,非常值得期待!
  • 一眼万年之宠妻无下限

    一眼万年之宠妻无下限

    见过女主魂穿的,也见过男主魂穿的,你见过男女主一起魂穿没?!穿越之后再续前缘,独宠!
  • 无上圣天

    无上圣天

    什么?你也是武者,好吧,那你接我一招五行幻灭禁咒吧!什么?你还会相术,好吧,那你领教一下诸天涅槃秘法吧!什么?你竟会仙法,好吧,忘记告诉你,我还是个异能者……但是,作为一个失去记忆,还被当作千年废柴的穿越者,我表示压力真的很大。
  • 虫图腾Ⅲ:疑云虫重

    虫图腾Ⅲ:疑云虫重

    在这硝烟弥漫的空气中却隐藏着骇人惊闻的秘密。一只小小的虫子会有何种能力足以颠覆历史?金木水火土,驱虫家族族的五代君子,各自拥有各自独门的绝技。潘俊掌握着木系的驱虫之术,既可救人于瞬间,又可致人于死地;水系族的时妙妙手中一抖便可放出隐形的三千尺,却还有着千容百貌惊人的易容之术;金系族的五关阵布局,局局设密,生死系于一瞬间……