Oracle数据库全文检索性能研究

2016-10-29 01:52龚建华
现代计算机 2016年27期
关键词:文档检索数据库

龚建华

(国防信息学院,武汉 430010)

Oracle数据库全文检索性能研究

龚建华

(国防信息学院,武汉430010)

随着全文检索应用场景越来越多,更加需要了解数据库全文检索的性能。介绍Oracle数据库全文检索的设置方法,然后加载测试数据,对全文检索和模糊查询的性能进行比对测试,最后对全文检索的查全能力和查询速度进行详细分析。

数据库;全文检索;模糊查询

0 引言

随着信息社会的不断发展,获取信息比过去任何时候都变得更加容易,人们在碰到疑难问题时会主动查询信息,查询信息的频率比过去高出了很多倍。生产生活中涌现的大量信息通常以文本形式呈现,很多信息还没有来得及结构化,或者这些根本没有必要进行结构化,导致目前从文本中查找信息是信息查询的主流形式。由于文本难以量化比对大小,因此与数量、日期类型的数据查询相比,文本的比对更复杂、更费时。

数据库全文检索是在数据表文本字段上建立全文索引,文本查询完全在索引上进行,毋庸置疑,建立全文索引可以提高文本数据查询的效率,但是查询效率到底能够提高多少,查询效率与哪些因素有关,这些都是需要深入研究的问题。本文以Oracle10g企业版10.2.0.1.0版为研究对象,对比研究Oracle数据库全文检索性能。

1 全文检索设置

1.1解锁CTXSYS用户

Oracle数据库建立全文检索在的工具包在CTXSYS模式中,安装数据库时,默认情况下CTXSYS用户是锁定的,在使用CTXSYS工具包之前,必须解锁CTXSYS用户,具体操作如下:

1.2CTX_DDL包授权

CTX_DDL包是设置全文索引的工具,因此在创建全文索引之前需要获得该包的执行权限,例如把该包的执行权限授予SCOTT用户,具体操作如下:

1.3创建中文分词名称

在Oracle数据库中,针对不同国家的语言提供了不同的分词器,常用的中文分词器主要有CHINESE_VGRAM_LEXER和 CHINESE_LEXER,其中CHINESE_LEXER是新的汉语分词器,支持中文和U-nicode字符集,该分词器最大的改进是能够认识大部分常用汉语词汇,因此能够更有效地分离词汇。这里选用CHINESE_LEXER分词器,使用该分词器之前,需要建一个分词器实体名,操作如下:

其中,CHINESE_LEXER是分词器,MY_CHI-NESE_LEXER是分词器实体名。

1.4创建全文索引

(1)创建数据表

在SCOTT模式下,创建一张用于存储大量文本的数据表,操作如下:

其中,TXT字段是clob类型,可以存储大量文本,单条记录可以高达4G容量,NAME用于文本来源的文件名称,ID只是一个编号。

(2)创建全文索引

Oracle数据的全文索引有 CONTEXT、CTXCAT、CTXRULE、CTXXPATH等四种类型,对DT表的TXT字段创建CONTEXT类型全文索引,操作如下:

create index IDX_DTTXT on SCOTT.DT(TXT)indextype is ctxsys.context parameters('LEXER MY_CHINESE_LEXER');

执行这条命令即可创建全文索引,其中ctxsys.context是全文索引类型,'LEXER MY_CHINESE_LEXER'表示使用名称为MY_CHINESE_LEXER的分词器。

2 全文检索测试

由于全文检索是在全文索引的基础上做检索,从理论上讲应该比模糊查询直接针对文本做查询要快一些,下面通过对比分析研究全文检索的检索速度。

2.1给DT表加载测试数据

为了能够重现测试结论,这里选用中文版HTML格式JAVADOC系列文档作为测试数据,该JAVADOC文档集共有8964篇、约198M字节,是Java语言的编程指南,每篇文档包含中英文字符,可作为测试数据。

向Oracle数据库加载CLOB字段内容时,通常不能直接插入,而应该采用流的方式加入,所以这些测试数据需要编写程序加载到DT表中,具体操作略,数据加载完毕后,DT表所占表空间大小约550M字节。

2.2维护全文索引

每次更新DT表TXT字段的数据后,应当及时进行全文索引维护,即同步和优化,使全文索引与TXT字段的内容吻合,具体操作如下:

2.3全文检索与模糊查询对比测试

(1)查询工具与查询命令

使用PL/SQL Developer 9.0中文版为查询工具,使用下列语句来对比测试结果

模糊查询的语句为:

(2)查询方法

为提高对比分析的精确性,每次查询尽可能采用一致的环境,使用相同的查询工具,在相同的查询窗口,每次查询前等待CPU空闲。PL/SQL Developer 9.0设置为一次显示全部查询结果,操作系统中不额外运行其他应用程序,避免对系统资源的干扰。选用了“合成”、“网络”、“链接”等检索词。

(3)查询结果

全文检索和模糊查询对比测试的结果如表1所示。

表1 全文检索与模糊查询对比测试结果

表中:

记录数占比=查询结果记录数/DT 表总记录数(式1)

记录数互比=全文检索的结果记录数/模糊查询的结果记录数(式2)

查询速度互比=模糊查询的耗时/全文检索的耗时(式3)

耗时是查询过程所使用的时间,以秒为单位,来自PL/SQL Developer 9.0 给出的结果。

3 全文检索性能分析

(1)对测试数据本身的分析

测试选用JAVADOC文档集属于一个单一的专业领域,共有8964篇,占用550M左右表空间,有一定的规模,数据量对全文检索性能分析有意义。

测试中选择了7个检索词,这7个检索词的查询结果的记录数占比从0.007变化到0.975,覆盖范围比较广,检索词选取对全文检索分析有意义。

(2)查全能力分析

图1 全文检索记录数与模糊查询记录数

图2 全文检索记录数与模糊查询记录数互比

模糊是查询能够把满足条件的所有数据都查询出来,而全文检索由于可能存在分词不正确的原因,可能有少数满足条件的记录查询不到。从图1和图2可以看出,对相同表和相同的检索词,全文检索和模糊检索的结果基本相差很小,记录数互比最高到0.9998856,笔者推断,记录数互比很高的原因是我们使用专业文献作为测试数据集,并且使用专业词汇作为检索词。基本可以认为在专业领域全文检索可以查全所有结果。

(3)查询速度分析

图3 模糊查询耗时

从图3中可以看出,无论查询结果记录占比为多少,模糊查询的时间基本上是一个常数,在16秒左右。反过来说明,模糊查询的耗时与查询结果的数量没有关系。这个测试结论印证了模糊查询机制,模糊查询要将检索词与所有记录的TXT字段内容进行比对,对同一个表每个检索词比对记录数是相同的,在一篇文档内比对的方法也是相同的,所以每个检索词的查询耗时基本相同。

图4 全文检索耗时

从图4中可以看出,全文检索的耗时随着检索结果的增加线性增加,这与全文索引的存储机制有密切关系。如果有多篇文档包含同一个索引词,那么就会对这个索引词建立起这些文档的编号链表,包含同一个索引词的文档越多,链表就越长。全文检索就是找到索引词的链表,并解析链表把文档编号分析出来。因此当索引词的记录数越多时,链表就越长,耗时就越多,基本是一个线性递增的关系。

从图5中可以看出,查询结果记录数占比小于0.1时,全文检索与模糊查询的速度互比有几十倍甚至上百倍,全文检索的优势非常明显。当查询结果记录数占比大于0.4时,全文检索与模糊查询的速度互比小于5,最小只有2.426,全文检索的优势减弱。综合图3和图4可以看出,模糊查询的耗时与查询结果多少无关,基本是一个常数,而全文检索查询的结果记录越多耗时越长,这是查询结果越多时全文检索优势迅速下降的根本原因。虽然全文检索的优势已经不是十分明显,但是全文检索两倍以上的速度优势仍然有应用价值。

图5 全文检索与模糊查询的速度互比

[1]蒙辉,陈燕.Oracle Text技术在复杂结构数据库中的应用[J].计算机技术与发展,2007,17(4):38-44.

[2]葛振国,李建,何林糠等.基于Lucene的Oracle数据库全文检索.信息技术,2010(3):156-158.

[3]杨宝峰.数据库全文检索技术.黑龙江科学信息,2007(5)45-45.

Research on the Performance of Oracle Full Text Retrieval

GONG Jian-hua
(PLA Academy of National Defense Information,Wuhan 430010)

With more and more applications in full text retrieval,understanding of the performance of database full-text retrieval is needed.Introduces the method of setting Oracle text,and then the loads test data,tests the performance of full-text retrieval and fuzzy query,analyses the search ability and speed of the full-text retrieval in details.

Database;Full Text Retrieval;Fuzzy Query

1007-1423(2016)27-0036-04DOI:10.3969/j.issn.1007-1423.2016.27.010

龚建华(1973-),男,湖北麻城人,副教授,硕士研究生,研究方向为信息系统设计与数据工程

2016-06-21

2016-09-20

猜你喜欢
文档检索数据库
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
瑞典专利数据库的检索技巧
在IEEE 数据库中检索的一点经验
一种基于Python的音乐检索方法的研究
Word文档 高效分合有高招
数据库
数据库
数据库
数据库