oracle 11g全文索引,详解Oracle数据库中文全文索引

详解Oracle数据库中文全文索引

日期:2010年5月11日 作者:

一、历史背景

Oracle数据库的全文检索技术以前十分完满,Oracle Text使Oracle9i具有了强悍的文本检索才干和智能化的文本维护才干。Oracle Text是Oracle9i采用的新称号,在Oracle8/8i中它被称作Oracle interMedia Text,在Oracle8以前它的称号是Oracle ConText Cartridge。

二、Oracle Text 索引文档时所运用的首要逻辑步骤如下:

(1) 数据存储逻辑搜索表的一切行,并读取列中的数据。通常,这只是列数据,但有些数据存储运用列数据作为文档数据的指针。

(2) 过滤器提取文档数据并将其转换为文本表示方式。存储二进制文档 (如 Word 或 Acrobat 文件) 时须要这样做。过滤器的输出不必是纯文本格式 -- 它能够是 XML 或 HTML 之类的文本格式。

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

(4) 词法分析器提取分段器中的纯文本,并将其拆分为不延续的标志。既存在空白字符分隔言语运用的词法分析器,也存在分段庞杂的亚洲言语运用的专门词法分析器。

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

三、须要的权限

要运用Oracle Text,必需具有CTXAPP角色或许是CTXSYS用户。Oracle Text为系统维护员提供CTXSYS用户,为运用顺序开发人员提供CTXAPP角色。具有CTXAPP角色的用户可执行以下职务:树立索引,维护 Oracle Text 数据字典,包括树立和删除首选项,执行Oracle Text 查询,运用 Oracle Text PL/SQL顺序包。

如图所示:

2010511858399968.gif

四、详细的完成

文本装入文本列后,就能够树立Oracle Text索引。文档以许多不一样方案、格式和言语存储。因而,每个 Oracle Text 索引有许多须要配置的选项,以针对特定情况配置索引。树立索引时,Oracle Text可运用若干个默许值,但在大非少数情况下要求用户议决指定首选项来配置索引。

每个索引的许多选项组成功用组,称为"类",每个类集中表现配置的某一方面,能够以为这些类就是与文档数据库有关的一些疑问。比如:数据存储、过滤器、词法分析器、有关词表、存储等。

每个类具有许多预定义的行为,称之为对象。每个对象是类疑问能够具有的答案,并且大非少数对象都包括有属性。议决属性来定制对象,从而使对索引的配置愈加多变以顺应于不一样的运用。

(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 (包括多种言语中的非索引字的多言语非索引字表)。

详细操作理论

1、 树立词法分析器及有关词表

Begin

-- 定义一个词法分析器

ctx_ddl.drop_preference('cnlex');

ctx_ddl.create_preference('cnlex','CHINESE_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('mywordlist','SUBSTRING_INDEX', 'YES');

end;

// 上面的语句中,假设是针对英语语种则能够采用下面的语句来定义词法分析器

ctx_ddl.create_preference('mylex','BASIC_LEXER');

ctx_ddl.set_attribute('mylex','printjoins','_-');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值