基于Oracle大数据的全文检索技术研究与实现

2013-10-20 08:35李瑞丽黄以凯
微型电脑应用 2013年1期
关键词:全文检索外事检索

李瑞丽,钱 皓,黄以凯

0 引言

随着现代信息科技的不断发展,如何较快较好的实现全文检索已成为比较热门的话题。全文检索是指将文件中所有的文本与检索的关键字进行匹配的一个资料检索方法。全文检索技术是指通过关键字将存储在信息系统数据库中,包括该关键字的所有记录查找出来的检索技术,可以获得信息文本中的所有相关章、段、节、句、词等信息,同时也可以对信息进行各种统计和分析。

本文将介绍如何使用 Oracle的全文检索技术提供一个优秀快速的解决方案。在已有的信息系统中,利用Oracle text和Ultra Search实现对不同格式数据源,尤其是以LOB类型(word、excel、pdf等二进制格式的文件)保存的数据的全文检索,并且解决了因系统中间件和Ultra Search中间件不同带来的权限控制问题。

1 外事一体化综合管理系统课题简介

外事一体化综合管理系统(课题编号:09511503500,以下简称外事系统)是由上海市护照签证受理中心、万达信息股份有限公司共同承担的研发课题。外事系统设计开发了诸如来华签证、领事认证、办公审批等20多个子系统。各个子系统既有独立性,也有关联性,业务数据表近200张,有些数据表的数据达到数十万级,且各种格式的附件存储在LOB字段中,要求系统能够提供准确而快捷的全文检索功能。因此如何实现基于大数据量的全文检索是外事系统的一大技术难题。

2 Oracle Text简介

Oracle text是Oracle10g的组件,基于后台数据库,是一种强大的检索工具,搜索范围可以是多种文本格式的数据来源,可对Oracle数据支持的多种语言实现全文检索功能。

Oracle Text实现全文检索的逻辑步骤主要包括如下:

(1)搜索检索目标数据库中的所有表源,并读取所有表源列中的数据。

(2)通过过滤器过滤文档数据并将文档数据转换为文本表示方式。

(3)通过分段器提取过滤器的输出的文档信息,并将该文档信息转换为纯文本。

(4)通过词法分析器提取分段器中输出的纯文本信息,并将该纯文本信息拆分为不连续的标记。

(5)通过索引引擎提取词法分析器中的输出的所有不连续的标记,并构建索引。

Oracle Text为系统管理员分配CTXSYS角色,为应用程序开发人员分配CTXAPP角色。CTXSYS角色的用户可启动Oracle Text服务器,并执行CTXAPP角色下的所有任务。CTXAPP角色的用户可创建索引,管理 Oracle Text 数据字典,执行Oracle Text 查询,使用 Oracle Text PL/SQL程序包。

Oracle Text的使用步骤归纳起来如下:

(1)建表并装载文本。如:

(2)配置索引。

(3)建立索引。如:

(4)发出查询。如:

(5)索引维护:同步与优化

Oracle Text可为不同格式存储方式的文本文档配置索引,这些索引的选项组成功能组,被称为“类”。Oracle Text的主要类包括存储(Storage)类、数据存储(Datastore)类 、文档段组(Section Group)类、相关词表(Wordlist)类、索引集(Index Set)、词法分析器(Lexer)类、过滤器(Filter)类等。

3 Ultra Search简介

Ultra Search是Oracle的附加功能模块,与其它搜索引擎工具的技术构架类似。Ultra Search提供了六种搜索数据源,常见的为:

(1)Web源:指由网站发布更新的内容,包括图片、音频、视频等资源。

(2)文件源:指可访问的机器上所有文档集,包括word、excel、pdf等各种类型在内的多种常见格式的文件。

(3)电子邮件源:指发送到特定邮件地址的邮件信息。

(4)表源:指来源于数据库表信息的数据源,可建立多个任意新表源。

Ultra Search是为用户提供友好界面的搜索工具,与Oracle Text有相同的公共接口,在聚集信息的索引、转换查询上增加了专门技术,因此相对于Oracle Text来说,Ultra Search查询性能质量更高,可扩展性更优化。Oracle Text与Oracle数据库的高度集成,实现了Ultra Search与动态数据的自由交互。

Ultra Search由3个组件组成:

(1)服务器组件 :包括Ultra Search资料库、Oracle Text和远程Crawler。

(2)Crawler :收集信息,并对这些信息建立索引的过程。

(3)中间层组件 :包括Java查询应用程序接口、JSP查询应用程序、Java电子邮件应用程序接口和管理工具。

Ultra Search与Oracle Text的高度集成能够快速便捷的实现全文检索功能,但是当与应用系统相结合时中则存在一些不足之处:(1)由于Ultra Search本身是一个应用系统,基于oracle的中间件oc4j,而一般的应用系统则基于一些其他的中间件,如Weblogic等;(2)如何能使Ultra Search与应用系统更好的实现兼容,并实现权限控制,是本文讨论的重点。本文基于外事系统上对如何实现 Ultra Search和Oracle Text的全文检索功能进行讨论与设计。

4 基于Oralce Text和Ultra Search的全文检索设计与实现

4.1 系统框架设计

本文在Oracle组件Ultra Search和Oracle Text的基础上进行改进,给出了基于大数据的外事系统全文检索的一个简单快速的实现方式。系统结构设计,如图1所示:

图1 系统结构图

外事系统与实现全文检索功能的Ultra Search和Oracle Text是相对独立的系统,使用不同的中间件 Weblogic和Oracle 的 OC4J。Ultra Search是基于 Oracle Text和 OC4J的一个客户端程序。在系统中,我们用Oracle Text创建外事系统检索所需的表源(Table Source)和查询组(Source Group),每一个业务数据表对应一个 Table Source,同一个模块功能的Table Source组成一个Source Group,此时生成的Table Source和Source Group保存在Oracle数据库中的wksys.wk$_data_source和wksys.wk$_source_group表中。

4.2 创建Table Source与Source Group

在 Ultra Search客户端程序中可对 wksys.wk$_data_source和wksys.wk$_source_group表进行维护。在建立Table Source时,需要区分不同格式类型数据的索引存储方式,如VARCHAR2、CLOB数据对应的索引类型Plain Text,BLOB数据对应的索引类型为Binary等。

由于应用系统中需要检索的业务表与字段数量可能会比较多,手工建立这些table source与group会占用开发人员比较多的时间,为了提高开发效率,本文用sql脚本建立table source与table group。

(1)系统中针对每个字段建立索引,例如:'zh','BINARY',''为创建 Table Source的所有参数,CASE_ATTACH_BL_ATTACH_CONTENT为Table Source名称,oa为对其创建索引的表空间名称,CASE_ATTACH为创建索引的表源,BL_ATTACH_CONTENT为创建索引的字段,NM_ATTACH_ID 为主键名称,ST_ATTACH_NAME为检索结果显示的标题字段。当脚本准备完全后,通过执行wd_create_datasource来创建所有的table source。

(2)同一模块作为一个查询组,例如:

(3)制定检索方案:当Table Source与Source Group创建后,制定检索方案,由于应用系统用户比较多,如在办公时间创建索引,可能会导致数据库性能下降,因此创建索引并不是同步的,在第一次创建索引之后,我们选择在每天19:00点之后开始增量索引。当索引创建完就可以在查询页面对系统进行检索了。

4.3 权限与模块控制

索引创建完成后,可在Ultra Search的检索页面对系统进行检索,但此时的检索结果没有任何权限的判断,针对外事系统的业务需求,每个处室只可查询自己处室的数据,各处室有权限的模块也不同,具有特殊角色的人员除外(如系统管理员)。如何实现对检索结果的权限、模块、角色控制以及,查看检索结果的详情也是本文的一个难点。

本文给出了一个解决方式,如图2所示:

图2 检索流程图

用户在外事系统门户中的检索流程如上图所示,主要的涉及的业务表如下:

(1)创建模块与查询组对应关系表,如下:

检索结果中只能显示查询用户所拥有模块的数据。当用户从应用系统门户中进行检索时,首先在后台代码中拿到该用户的所有模块MODULE_ID,将其组装成一个结果集传递到Ultra Search的系统中,通过MODULE_ID集合找到所对应的所有的 GROUP_ID,针对这些查询组进行检索,从而实现了用户的模块权限的控制。

(2)创建url模板与目标action对应关系表,如下:

用户所拥有模块的数据不一定都有查看权限,如何屏蔽掉那些没有查看权限的数据,是该系统的一个最大难点。在建立Table Source时,参数pv_value记录的是检索结果中用于显示的 Url链接,通过此链接可打开数据详情页面。url中记录的数据主键id、标题字段、类型字段等其他信息,通过ULTRA_URL_MAP_ACTION表,在点击检索结果的标题时,首先跳转到应用系统中,获取url 的链接,从中拆分出 action 作 为 ORIGINAL_ACTION, 通 过ORIGINAL_ACTION 找 到 PERM_ACTION, 在PERM_ACTION中,将核对用户是否有该数据的查看权限,如果有则通过ORIGINAL_ACTION查看,否则显示“无权限查看!”。系统中会存在不同类型的业务数据放在同一个业务表中,需要根据 URL_TYPE找到不同的TARGET_ACTION。

4.4 检索结果的处理

由于Ultra Search检索中的标题字段拿不到,把业务表中的标题字段放在检索结果的url中,在检索结果页面将其拆分出来作为标题字段即可达到理想的效果。检索结果页面中信息来源显示的都是英文的查询组名称,用户体验性不是太好,因此我们通过GROUP_ID 在ultra_module_map_group表中找到对应的 MODULE_NAME作为来源显示在检索结果页面中。

4.5 检索页面的使用说明

检索页面的使用方式与搜索引擎网站的检索操作方式习惯相似。检索结果中暂时排除格式为图片或者扫描版的数据信息。多个检索关键字可由“+”、“-”、空格、双引号等特殊符号组合。“+”、“-”号必须为英文输入法。“+”代表必须包含;“-”代表不包含;空格代表“或”等。如果查询的词语中间包含空格,查询时需要加引号。

5 结论

本文以外事系统为例,介绍了基于Ultra Search与Oracle Text实现全文检索的一种快速、高效的解决方案。在不用改变原有应用系统的基础上,独立实现全文检索,大大减少了应用系统风险。解决了因不同的中间件带来了用户权限与模块控制的难题,同时也提高了系统集成的灵活性和可扩展性,实现了更好的业务过程控制,提高了用户检索的效率和速度,满足了客户的业务需求。

[1]Oracle(R) Text Application Developer's Guide 10g Release 1 (10.1)[C][Part Number B10729-01].

[2]Oracle Text-An Oracle Technical [M]White Pater 2001.

[3]Oracle Text Reference Book 2001.

[4]Jie Lu;Jamie Callan User Modeling for Full-Text Federated Search in Peer-to-peer [M]Networks 2006

[5]范鹏.基于Oracle Text的信息系统资料库全文检索技术, [J]《通信与计算技术》,2006年第2期

[6]蒙辉;陈燕 Orade Text技术在复杂结构数据库中的应用 [期刊论文]-[J]计算机技术与发展2007(04)

[7]熊志辉.王德鑫.王炜.张茂军 基于Oracle的多权限多格式文档组织与检索系统 [期刊论文]-[J]计算机应用2008(9)

[8]李尚初.Oracle的全文检索技术, [J]哈尔滨师范大学自然科学学报,2009年第4期

[9]罗玉梅.Oracle全文检索技术的应用, [J]电子商务,2010年第8期

猜你喜欢
全文检索外事检索
外事之窗
戒急用忍 行稳致远——外事监管六大问题答疑
一组成功的“外事报道”出炉始末
Oracle数据库全文检索性能研究
专利检索中“语义”的表现
口译不宜“任性”:基于语料库的外事翻译等效探索
全文检索引擎Lucene系统模型与应用研究
全文检索引擎技术在电子病历中的应用
国际标准检索
国际标准检索