全文检索范文

时间:2023-03-05 09:55:27

全文检索范文第1篇

随着海量信息的出现以及计算机存储技术的发展,文献数据库正由书目数据库向全文数据库转变。这一转变使得全文检索技术得到空前的发展。

常用的实现全文检索的方法主要有以下两种:

第一种方法是不对数据库建立索引而直接对文章进行匹配的方法。这种方法由于没有建立索引库,因此所占空间较少,但同时正是因为它没有索引库,所以在进行全文匹配时要花费大量的时间。

第二种方法则是一种为全文建立倒排索引库的方法。这种方法可以大大节省检索的时间。但同时,这种方法需要占用一定的存储空间来建立索引库。目前,国内外对全文检索的研究可以说是达到一个高潮。许多研究机构和商业组织都在进行这方面的研究。国际最具影响力的全文检索评估机构当属TREC(Text Retrieval Conference)。它是由美国技术和标准研究所(NIST)和美国高级研究计划局(DARPA)共同举办、自1992年以来每年一次的全文检索评估会议,会议参加者带来研究的检索系统以供专家进行评估。传统的信息单位,图书馆等也开始建立全文数据库,引进各种全文检索技术。一些软件公司,也纷纷推出全文检索软件。国内比较有代表性的如TRS等,而国外比较著名的有下文将要介绍的Microsoft公司开发的SQL Server 2000。

2 在SQL Server 2000中配置全文检索服务

SQL Server是Microsoft公司在原来和Sybase公司合作的基础上推出的一款面向高端的数据库系统。而SQL Server 2000版本则是最新的、大型联机事务处理的新型数据库平台。它继承了SQL Server以前版本的一些强大的优势,如简单易用、具有良好的稳定性和高效性等等。同时,它的功能比以前的版本更加强大,界面更加友好。总之,无论是在功能、安全性、可维护性,还是在易操作性上都较以前版本有了长足的进步。它的全文检索功能配置简单,使用十分方便。我在建立关于信息检索的英文论文题名、文摘数据库的过程中,使用了SQLServer 2000。由于文摘文本单词量平均在500个左右,而且论文记录数量较多,如果不为文摘建立全文索引库,将严重影响检索效率。因此,我使用SQL Server2000的全文检索功能为这个数据库提供了全文检索服务。

2.1 建立全文检索服务的过程如下:

第一步,在SQL Server中建立一个全文数据库English—Data。在该数据库中建立一个表Papers。该表的字段有pa—per__id(代表论文的顺序,数据类型为int,长度为4,要求非空,并为标知,标知种子为1,自动增量为1)、paperAitle(代表论文的题目,数据类型为vchar,长度为200,要求非空)、pa—per_abstract(代表论文的文摘,数据类型为vchar,长度为8000,要求非空)。

第二步,为建立全文索引,一定要为该表建立唯一索引(Unique Index)。我为Papers表的paper_id字段建立唯一索引。

第三步,将数据逐步导入到表Papers中。

第四步,打开SQL Server的企业管理器,在左侧的树视中点击数据库。然后点开数据库EnglishData.。选择“全文目录”。点击右键,选择“新建全文目录”,建立全文目录Paper-AbstractFullSearch,然后建立名称为AbstraetSearch的调度。其他接受默认。

第五步,选择企业管理器的右侧的表Papers,单击右键,选中“全文索引表”,单击“在表上建立全文索引”。将会出现“全文索引向导”窗口。点击“下一步”会到达“选择索引”窗口。由于本表只有一个唯一索引paper_id,点击“下一步”,会出现“选择表中的列”窗口。选择“paper_abstract”字段,然后点击“下一步”,出现“选择目录”窗口,接受默认配置,点击“下一步”,出现的窗口“选择或创建填充调度(可选)”窗口,接受默认配置再点击下一步。出现“正在完成SQL Server全文索引向导”,点击“完成”。完成配置。

第六步,选择表Papers,点击右键,选择“全文索引表”,点击“启动完全填充”,等待完成。

第七步,配置数据源名。在ODBC管理器中的“系统DSN”中,单击“添加”,选择“SQL Server”。在数据源名中输入“EnglishData”, 然后进行客户配置。

第八步,如果以后对表Papers进行任何的修改(包括添加、删除记录和对原记录进行编辑),都要重复第六步的操作。这一步是为了保证全文索引库能够与表Papers的修改同步。

以上是建立全文索引的全过程。完成建立后,即可以使用标准的T—SQL语句对其进行全文检索。

2.2 在web平台上进行全文检索

虽然使用T—sQL语句可以很方便地进行全文检索,但笔者考虑到不是所有的用户都掌握了T—sQL语句,因此为方便用户检索,笔者建立了一个基于Web界面的全文检索平台。用户只需将检索词提交给Web服务器,服务器使用ASP调用ADO控件来对SQL Server2000数据库进行查询,并将检索结果以Web页面的方式返回给用户。

ASP(Active Server Pages)是微软公司建立的一套服务器端脚本环境。设计人员可以结合HTML、ASP指令和ActiveX控件建立动态、交互且高效的Web服务器应用程序。由于所有的程序都嵌入HTML中且在服务器端执行,因此不必担心客户端的浏览器能否运行程序。同时,它还具有简单、易开发、兼容性好等优点。ADO(ActiveX Data Object,ActiveX数据对象)是一个ASP内置的ActiveX服务器组件(ActiveX Server Component),用于数据库访问,可把它与ASP结合起来,建立提供数据库信息的网页内容,对数据库进行查询、插入、更新、删除等操作。ADO对象可以操作所有ODBC驱动程序存取的数据源格式。同时,ADO还具有简单易用、速度快等优点。

SQL Server 2000的全文检索服务可以支持布尔检索和加权检索等高级检索。用ASP可以实现这些检索功能。

3 全文检索语句CONTAINS和FREETEXT的使用

全文检索使用户可以高效检索存储在数据库的char、varchar、text、ntext、nchar、nvarchar等数据类型列中的文本数据。在进行全文检索之前,应建立和填充数据库全文索引。

3.1 全文索引

为了支持全文索引操作,SQL Server 7.0新增了一些新的存储过程和Transact-SQL语句。使用这些存储过程创建全文索引的具体步骤如下(括号内为每步所调用的存储过程名称):

(1)启动数据库的全文处理功能(sp_fulltexLdatabase);

(2)建立全文目录(sp_fulhexLcatalog);

(3)在全文目录中注册需要全文索引的表(sp_fulltext table);

(4)指出表中需要全文检索的列名(sp_full—texLeolumn);

(5)为表创建全文索引(sp_fulltexLtable);

(6)填充全文目录(sp_fulltext_catalog)。

下面举例说明:

在本例中,对test数据库book表中title列和notes列建立全文索引。

//首先先启动SQL Server的全文搜索服务。

use test //打开数据库

go

//打开全文索引支持

execute sp_fulltext_database ‘enable’

//建立全文目录ft_pubs

execute sp_fulltext_catalog ‘ft_test’,‘create’

//为titles表建立全文索引数据元,pk_title为book表中由主键所建立的唯一索引,此参数必须。

execute sp_fulltext_table ‘book’,‘create’,‘ft_test’,‘pk_title’

//设置全文索引列名

execute sp_fulltext_eolumn ‘book’,‘title’,‘ add’

execute sp_fulltext_ column ‘book’,‘notes’,‘add’

//建立全文索引

execute sp_fulltexLtable ‘book’,‘activate’

//填充全文索引目录

execute sp_fulltext_ catalog ‘ft_test’,‘start_ full’

go

至此,全文索引建立完毕。

3.2 全文检索

SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。CONTAINS语句的功能是在表所有列或指定列中搜索:

一个字或短语;

一个字或短语的前缀;

与一个字相近的另一个字;

一个字的派生字;

一个重复出现的字。

CONTAINS语句的语法格式为:

CONTAINS({column *}),‘’) 其中,column说明被搜索列,使用时说明对表中所有全文索引列莲行搜索

Contains_ search_ condition说明CONTAINS语句的搜索内容,其语法格式为:

{||| |) [{|ANDIAND NOT|OR}}] [.n]

下面就simple_term和predix_term参数做一简要说明:

simple— term指出CONTAINS语句所搜索的单字或短语,当为一个短语时,必须使用双引号作为定界符。其格式为:

{word | “phrase”}

predix_term说明CONTAINS语句所搜索的字或短语前缀,其格式为:

{“word * ”| “phrase ”}

例如,下面语句检索b0ok表的title列和notes列中包含database或computer字符串的图书名称及其注释信息:

select title,notes from book

where contains(tilte,‘database’)or contains(notes,‘datable’)

or contains(title,‘computer’)or contains(notes,‘computer’)

FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。

FREETEXT语句的语法格式为:

FREETEXT({column * },‘freetext_string’)

其中,column说明被搜索列,使用*时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。

例如,下面语句使用FREETEXT语句搜索book表中包含Successful Life字符串的数据行:

select title,notes

from book

where freetext (*,‘Successful Life’)

4 结束语

通过学习和实践,我认为SQLServer2000的全文检索服务有以下优点:

第一,简单易用。由于SQLServer2000的全文检索服务已经集成到整个服务中,因此,全文检索可以使用“企业管理器”进行统一的图形界面的管理。而且,进行检索时可以使用标准的T—SQL语句,学习、使用十分方便。

全文检索范文第2篇

目前很多网站和系统都提供了全文搜索功能,用户可以输入词或者语句来定位匹配的记录。在后台,可以使用Select查询中的Like语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在处理大量数据的时候。MySQL针对这一问题提供了一种基于内建的全文查找方式的解决方案。开发者只需要简单地标记出需要全文查找的字段,然后使用MySQL方法在那些字段运行搜索,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜索),而且实现了更高质量的搜索,因为MySQL使用自然语言来智能地对结果评级,以去掉不相关的项目。这就是MySQL的全文检索功能。

到MySQL3.23.23时,MySQL开始支持全文索引和搜索。全文索引在MySQL中是一个 FullText类型索引。FullText索引用于MyISAM表,可以在Create Table时或之后使用Alter Table或Create Index在Char、VarChar或TEXT列上创建。对于大的数据库,将数据装载到一个没有FullText索引的表中,然后再使用Alter Table (或Create Index) 创建索引,这将是非常快的。

但是,众所周知,在英文排版时词间是以空格区分的,所以英文的分词是基于空格的。但是涉及到中文等东亚文字就没有这么简单了,因为中文词间并没有明显的区隔,所以中文的分词则是按照字典、词库的匹配和词的频度统计,或是基于句法、语法分析的分词,而MySQL并不具备此功能,所以MySQL对中文全文检索的支持几乎为零。

需求及设计思想

来自NetCraft统计的数据,截至2006年4月份全球网站数量超过8065万个,目前,Linux及Apache在网站操作系统及Web服务器软件市场的份额为62.7%。再来看一份来自中国互联网络信息中心(CNNIC)的调查报告,截至2006年1月1日,全国有69.4万个网站,在线数据库数为29万5400个。由于中国使用LAMP(Linux、Apache、MySQL、PHP)套件的数量没有达到世界平均份额,所以估计有15万左右的基于PHP/MySQL构架的网站,这不包括5万个WAP网站、企业管理系统、教学应用系统等信息管理系统。如果全都算上,在中国使用MySQL的站点(系统)数量应该在15万至18万之间。

MySQL有如此庞大的使用规模,中文全文检索在MySQL的实现将是相当迫切,加之笔者在做一个网站系统的时候也是由于租用服务器硬性环境,不能自由选择数据库或者添加组件,所以只能根据已有的条件进行适应性改良。一个偶然的思路使笔者产生了能否将中文和英文建立特定关联,然后再进行检索呢?答案是可以的。MySQL不支持中文全文检索,但是支持英文全文检索,可以将“中文全文检索”转变为“英文全文检索”,然后再变回“中文全文检索”。那么中文又如何转换成英文呢?思路可以是:中文全文检索拼音全文检索中文全文检索。所以转换的思路如图1所示。

图1 中文全文检索思路

用户输入中文信息提交的时候,通过一个中文到拼音的转换程序将其数据转换为拼音的格式存入数据库中,然后用户检索时同样是输入中文,也将检索词转换为拼音,到数据库中进行匹配,返回结果。但是这样做有两个缺点:第一个是,检索是成功了,可是没有中文原数据,如何返回有效结果?第二个是,中文转换拼音如果中文篇幅过长,转换时间过长怎么办?所以催生了第二种解决方法,如图2所示。

图2 改进后的检索思路

如图2所示,用户输入中文按照正常方式直接提交至数据库,然后有一个后台转换程序循环执行,将中文转换为拼音存入另外一张全文检索表中,其他用户在进行全文检索时由于词语长度有限,所以可以采用即时转换拼音,然后进行数据库查询匹配。

MySQL中文全文检索实现

1.数据库表结构设计

此处用到两张表,以为人员信息建立全文检索为例,分为:人员信息表(UserInfo)和全文检索表(IndexSeek),表结构如图3所示。

图3 人员信息表和全文检索表

人员信息表(UserInfo)各列含义为: ID(id),自增序列;姓名(user_name);个人介绍(user_introduction);全文检索状态(user_state),新添加或者修改后状态为0,拼音转换完成状态为1。

全文检索表(IndexSeek) 各列含义为:ID(id),自增序列;关联人员信息ID(user_id),对应UserInfo表中ID;索引项(index_item),该列设置为FullText全文检索;索引标示(index_mark),标示为哪个列的索引,本文中涉及两个索引,分别为姓名(user_name)、介绍(user_introduction)。

两个表中的log字段记录该行修改的时间和产生的错误提示。在本文中无实际用途。

2.用户输入中文资料

用户自己输入信息添加至数据库,例如,各项为:“1”、“张三”、“爱好编程,PHP,MySQL”、“0”。

3.后台转换拼音过程

后台应用程序按照规则进行中文到拼音的转换,笔者在网上下载了内码拼音转换数据包pinyin.dat,该文件的下载网址为:scws.省略/py/getpy.php。 以下以PHP代码为例演示中文拼音转换。

//my_Getpy汉字转换拼音类[5]

class my_Getpy

{

var $_dat = 'pinyin.dat';

var $_fd = false;

function my_Getpy($pdat = '')

{

if ('' != $pdat)

$this->_dat = $pdat;

}

function load($pdat = '')

{

if ('' == $pdat)

$pdat = $this->_dat;

$this->unload();

$this->_fd = @fopen($pdat, 'rb');

if (!$this->_fd)

{

trigger_error("没有`$pdat`文件", E_USER_WARNING);

return false;

}

return true;

}

function unload()

{

if ($this->_fd)

{

@fclose($this->_fd);

$this->_fd = false;

}

}

function get($zh)

{

/*if (strlen($zh) != 2)

{

trigger_error("`$zh` is not a valid GBK hanzi", E_USER_WARNING);

return false;

}*/

if (!$this->_fd && !$this->load())

return false;

$high = ord($zh[0]) - 0x81;

$low = ord($zh[1]) - 0x40;

// 计算偏移位置

$nz = ($ord0 - 0x81);

$off = ($high< < 8) + $low - ($high * 0x40);

// 判断 off 值

fseek($this->_fd, $off * 8, SEEK_SET);

$ret = fread($this->_fd, 8);

$ret = rtrim($ret, '\0');

return $ret;

}

function _my_Getpy()

{

$this->_unload();

}

}

//截取字符函数

function csubstr($str,$start,$len)

{

$strlen=strlen($str);

if ($start>=$strlen)

return $str;

$clen=0;

for($i=0;$i< $strlen;$i++,$clen++)

{

if(ord(substr($str,$i,1))>0xa0)

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,2);

$i++;

}

else

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,1);

}

if ($clen>=$start+$len)

break;

}

return $tmpstr;

}

//计算字符长度的函数,汉字中文都当作是长度为1

function StrLenW($str)

{

$count = 0;

$len = strlen($str);

for($i=0; $i< $len; $i++,$count++)

if(ord($str[$i])>=128)

$i++;

return $count;

}

//批量中文转换拼音函数,转换后每个字符中间加上空格,判断非中文字符如符号,英文,数字则不作变动

function operate_py($str){

$len_max=StrLenW($str);

$len="0";

$start="0";

$py = new my_Getpy;

for($start=0;$start< $len_max;$start++){

$simp=csubstr($str,$start,$len);

if ( ord($simp)>127 ){

$rs = $py->get($simp);

$rs=" ".$rs." ";

}

else{

$rs=$simp;

}

$rs_return.=$rs;

}

$py=null;

return $rs_return;

}

将该程序循环执行,查询user_state为0的行,取出user_name、user_introduction两列数据,分别进行拼音转换,然后插入全文检索表(IndexSeek)表中,添加两行数据,其中第一行为:

关联人员信息ID(user_id):1;//对应UserInfo表中ID,此处为1

索引项(index_item):zhang1 san1;

索引标示(index_mark): 姓名(user_name)。

第二行为:

关联人员信息ID(user_id):1;//对应UserInfo表中ID,此处为1

索引项(index_item):ai4 hao3 bian1 cheng2 ,PHP,MySQL;

索引标示(index_mark):介绍(user_introduction)。

至此,添加中文数据转换拼音过程完毕。修改用户信息同样步骤进行,只是不再新添加表,删除数据则根据关联id全部删除。

4.用户检索过程

由于用户检索时输入的关键词数量有限,则采用页面应用程序直接转换拼音进行匹配。例如用户输入检索词为:“编程”,提交给服务器,由服务器端程序处理转换为“bian1 cheng2”进行数据表IndexSeek的全文检索,全文检索SQL为:

SELECT * FROM IndexSeekWHERE MATCH (index_item) AGAINST (' bian1 cheng2');

得出关联人员ID为1,然后取得用户资料表中全部信息返回给用户。由于中文转换拼音过程同上,在此不再列出代码。

更多的英文全文检索技巧请参看MySQL手册,这里不再一一介绍。上面便是整个MySQL中文全文检索实现过程。

全文检索范文第3篇

关键词:Mimir 密文全文检索 信息安全

中图分类号:TP309 文献标识码:A 文章编号:1672-3791(2015)01(b)-0000-00

计算机网络规模的不断扩张以及各类信息技术不断向前发展,在我国党政机关以及科研单位、国防军工机构以及金融财政部门中,信息的交流量以及存储量都已经累积到了一定的程度,而如何能够在庞大的信息群中快速准确的寻找到自己所需要的信息,是当前数据检索系统建设的重点。并且在这些信息中,有大量信息涉及内容较为敏感,为机密信息,不允许随意的检索以及存储。我国的信息安全技术以及信息检索系统随着计算机网络技术的进步也有所提高,但是如何能够为信息的检索提供更加安全可靠的环境,并实现高效的海量信息安全检索,仍旧是目前科研人员所面临的一大难题。

1 相关工作

目前各行各业都开始意识到信息系统对于行业进步的影响力,但是信息系统也存在着很多安全隐患。怎样才能够在文本查询以及网页的存储中达到安全高效的目的,一直是研究和关注的重点,这其中的全文检索技术和全文数据库技术成为了国内外学者研究的热点。

我国信息的加密以及检索技术在目前的技术条件下发展十分迅速,并且也出现了诸多领先的技术产品,但是全密文高效检索系统的研究仍旧是当前难以解决的科题。这一问题的难点主要集中在如何才能够安全的实现在外包数据库中进行加密数据的检索以及存储。虽然原始数据具有相似性以及有序性,但是在数据加密后,很多原始特性就会失去,因而密文数据的检索难度便会加大。这也是一直困扰着我国检索系统研究技术人员的主要难点,也正式由于密文数据的这一特性,才提高了数据库的安全性。但是如何才能够在这一条件下,提高检索效率,仍旧需要进一步研究。

2系统比较

2.1传统全文索引

对于数据进行加密是一个很自然的趋势,而对密文检索技术的研究也是索引系统发展的一个趋势,其思路便是加密全文索引,从而实现密文检索。而该种加密方式依照加密粒度的不同可以将密文全文检索分成两种等级,即索引词级信息加密以及索引级信息加密。

索引级信息索引直接加密密文信息的明文全文索引,在进行信息检索的过程中首先需要需要进行解密,即针对密文索引部分内容进行全文解密或部分内容的解密,继而在解密的基础上展开信息的检索,通过这种方式虽然能够达到密文全文检索的目的,但是需要解密后才能够检索,从本质分析仍旧是明文信息的检索,因此安全系数较低,存在隐患问题,并且为了实现索引的解密,需要增量构建,会付出较大的代价。

而索引词级信息检索则是在原有检索结构的基础上通过相同的加密算法进行索引词的加密,在原有索引词级信息检索的基础上通过加密信息检索以及同一种加密算法,对原有明文索引结构进行加密,从而实现针对原有的明文检索信息进行加密的目的,实现密文全文检索。当前使用的IR模型大多都采用了索引词级密文索引,建立在Tlken词频信息构建以及便宜地址的基础之上,如果这些内容也被加密,那么在查询过程中的大量运算操作影响下,全文索引系统效率必然会大大降低,如果利用明文索引的形式,信息安全级别便会受到影响,因而传统的索引系统还需要被进一步改善。

2.2 mimir密文全文索引

全文检索系统的文档资源都是海量的,全文索引都采用增量方式构建,因此采用一种稳定、高效的数据结构构建全文索引对于实现高效的密文全文检索是非常重要的.由于B+树当节点分裂时只影响原节点和父节点,因此对于全文索引的增量构建在插入索引词时可以有效地保持索引B+树的平衡性,保障全文检索效率。

在明文全文检索系统中,基于明文索引中的索引词位置的递增关系,检索系统可以方便地判断一个较长的检索词是否出现在某个文档中,因此在全文检索系统中,索引词的位置信息对于较长检索词的判断是非常重要的。与直接加密索引词改造明文索引的方法不同,为了保证密文索引本身的高安全性,Mimir密文全文检索系统中并没有标识每个索引词的位置信息,因此如何实现较长检索词的匹配就成为了一个关键问题。

如果能够在密文全文索引中存储文档所有可能出现的检索词,则就可以不需要索引词的位置信息。但是首先不可能穷举用户可能提出所有查询关键词,而且大量地插入较长的组合索引词也会极大地增加密文索引的空间规模,而导致密文全文检索效率的下降。同时由于被查询命中的概率很小,词长太长的索引词对于全文检索的贡献也比较小,因此必要针对Mimir系统特点设计一种不需要索引词位置信息支持的文档归档索引词提取策。

2.3系统排序算法

全文检索系统大多都被应用与海量文档检索以及处理中,因而同一条查询条件相符的,全文检索系统中需要处理的文档都是海量的,对于一个查询条件来说命中的文档数量也非常大,结果排序就是将用户最感兴趣的内容优先呈现给用户,对于一个全文检索系统的可用性来说是非常重要的。目前的全文检索系统中通常都采用基于检索关键词词频的评分机制。

2.4系统效率以及安全性分析

Mimir实现不脱密的密文全文检索服务,其安全性和搜索效率都非常重要,本节对Mimir密文全文检索系统的检索效率和安全性进行理论分析。

Mimir系统有3种数据需要加密处理:索引词、索引指针和文档本身。为保障Mimir系统的安全性,以上都采用成熟的加密算法。Mimir对文档进行归档操作时,索引指针和密文文档的加密量相对很小,而密文全文索引中分词数量很大,因此会产生大量的索引词加密开销。

3 结语

在目前海量信息检索以及安全环境下,Mimir密文检索系统意义重大,尤其在密文检索系统效率提升方面具有跨越式的意义。该类系统的研究成果参考价值巨大,并且通过进一步的研究,针对系统中检索环境下的密钥管理以及密文检索功能下访问控制技术都会相应配置完善。并且Mimir还将进一步添加密文索引风险评估系统,从而提高索引系统的风险抗性,从而保证密文检索的安全度。

参考文献

1.黄汝维,桂小林,余思,庄威.云环境中支持隐私保护的可计算加密方法[J].计算机学报,2011,34(12)

全文检索范文第4篇

关键字:全文检索;倒排文件;Lucerne;全文数据库;自动分词

中图分类号:[G257.5] 文献标识码:A

一、全文检索技术简介

(一)什么是全文检索

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的 检索方式。这个过程类似于通过字典中的检索字表查字的过程。总之,全文检索技术是现代信息检索的一项重要技术。

(二)全文检索需要解决的问题

一套完整的全文检索一般包括: 1 对不同文本的统一处理; 2 索引的建立;3 对汉语词语进行正确的切分;4 检索问题;5 排序问题5 个问题进行分析与研究。

二、建立索引库

(一)索引文件分类

1.顺排档结构

顺排档文档是以 Decide 为主序的, 每一文档下存放各自出现的词的 ID 及各词所出现的次数和具置信息,各数据项的存储长度固定。

2.倒排档结构

(1) 一级索引:一级索引文件属于记录式文件,每一记录大小固定, 共有三个数据项构成, Word ID、 文档数、 第一个文档开始位置。 其中 Word ID 是词典中词条的 ID,文档数是指这个词总共在多少个文档中出现,文档开始位置是一个文件指针指向二级索引中出现当前词的文档集中的第一 个文档存储位置, 这个指针是一个长整形值相当于指明了是二级索引文件 中的第几条记录,因为各记录长度也是固定大小。通过这个指向可以直接 定位到二级索引文件读取位置,然后读取 n Docs 个记录即可,因为它们是存放在连续的地址空间上。

(2) 二级索引:二级索引也是一种记录式文件,每一记录有三个数据 项组成,Doc ID、出现次数、第一个 Hit 位置。其中 Doc ID 是文档的 ID, 出现次数指的是当前文档中某一个词出现的次数, 第一个 Hit 位置也是一 个指针,指向 Hits 文件中的某一位置。通过这个指针就可以直接定位到 Hits 位置中的读取位置,这样连续读取 n Hits 个记录就可以将所有当前词在当前文档中的出现的位置信息都读入。这些文件将属于同一 Word ID下的所有文档记录按其词在整个文档的权值从大到小排列。

(3) Hits 位置信息文件:这些文件每一记录只有一个数据项,即 Hit 位置信息,只记录了各词在文档中出现的位置。将同一词在同一文档中的 出现位置按出现的先后排列。 这样在读取文档并提取摘要时只需对字符串 从头到尾扫描一边即可,不需要来回扫描。

(二)倒排索引压缩

1.Lucerne 压缩技术

为了减小索引文件的大小,Lucene 对索引也使用了压缩技术。首先, 对词典文件中的关键词进行了压缩,关键词压缩为,例 如:当前词为“阿拉伯语” ,上一个词为“阿拉伯” ,那么“阿拉伯语”压 缩为。其次大量用到的是对数字的压缩,数字只保存与上一个值 的差值(这样可以减小数字的长度,进而减少保存该数字需要的字节数) 。 例如当前文章号是 16389(不压缩要用 3 个字节保存) ,上一文章号是 16382,压缩后保存 7(只用一个字节) 注意是“上一个词” 。 。由于词典 词典 是按顺序排列的,这种压缩方法的效果会非常显著。 是按顺序排列的

2. 动态文本集的倒排索引压缩方案

我们考虑文本集动态性时, 将文本内部的动态调整用两次文本层次的调整代替,即对一个文本作文字改动视为删除旧文本和增加新文本,因此一般只考虑文本层次的索引动态同步调整。位置序列记录的是某单词在一个文本内部的位置,由于只考虑文本层次的增加、删除,所以该序列内部的值不会发生任何的改动,它是静态的,可以采用压缩率较高的任何压缩方法。与文档ID 序列和词频序列相比,位置序列占用的索引空间往往多于二者,故而位置序列的压缩对整个倒排索引的压缩率起决定性作用。到目前为止,压缩率最高的首推二进制内插编码,虽然它的压缩与解压比较耗时,但与由压缩减少的 I/O 时间相比,可以忽略,因此我们可以对位置序列采用二进制内插编码。

三、中文分词研究

我们讨论的分词算法可分为三大类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于知识理解的分词方法。

(一)基于字典、词库匹配的分词方法

这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。

常用的几种机械分词方法如下:

1.最大正向匹配法 (MaximumMatchingMethod)通常简称为MM法

2.逆向最大匹配法 (RecerseMaximumMatchingMethod))通常简称为RMM法

3.最少切分法:使每一句中切出的词数最小。

(二)全切分和基于词的频度统计的分词方法

基于词的频度统计的分词方法是一种全切分方法。在讨论这个方法之前我们先要明白有关全切分的相关内容。

1.全切分

全切分要求获得输入序列的所有可接受的切分形式,而部分切分只取得一种或几种可接受的切分形式,由于部分切分忽略了可能的其他切分形式,所以建立在部分切分基础上的分词方法不管采取何种歧义纠正策略,都可能会遗漏正确的切分,造成分词错误或失败。而建立在全切分基础上的分词方法,由于全切分取得了所有可能的切分形式,因而从根本上避免了可能切分形式的遗漏,克服了部分切分方法的缺陷。

全切分算法能取得所有可能的切分形式,它的句子覆盖率和分词覆盖率均为100%,但全切分分词并没有在文本处理中广泛地采用。

2.基于词的频度统计的分词方法:

这是一种全切分方法。它不依靠词典,而是将文章中任意两个字同时出现的频率进行统计,次数越高的就可能是一个词。它首先切分出与词表匹配的所有可能的词,运用统计语言模型和决策算法决定最优的切分结果。它的优点在于可以发现所有的切分歧义并且容易将新词提取出来。

3.基于知识理解的分词方法

该方法主要基于句法、语法分析,并结合语义分析,通过对上下文内容所提供信息的分析对词进行定界,它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断。

4.一种新的分词方法

并行分词方法:这种分词方法借助于一个含有分词词库的管道进行 ,比较匹配过程是分步进行的 ,每一步可以对进入管道中的词同时与词库中相应的词进行比较 ,由于同时有多个词进行比较匹配 ,因而分词速度可以大幅度提高。这种方法涉及到多级内码理论和管道的词典数据结构。

四、索引数据库的搜索

(一) lucent 搜索算法

1.把.tic 文件调入内存。

2.在内存中用二分查找找到相应的 Block。

3. 把.tis 文件中相应的 Block 调入内存。

4. 在 Block 中顺序找到相应的 Term。

5 .Term 在索引里是有序排列的。

6 采用二分查找机制来定位索引里的 Term。 在 Index 包 TermInfosReader 类中的实现代码。 Private final into getIndexOffset (Term term) throws I Exception {into lo = 0; // binary search index Terms []

Nit hi = indexTerms.length - 1; while (hi >= lo) {into mid = (lo + hi) >> 1; nit delta = pareTo (index Terms [mid]); if (delta < 0)hi = mid - 1; else if (delta > 0) lo = mid + 1; else return mid; } return hi; }

(二)搜索过程优化

lucent 支持内存索引:这样的搜索比基于文件的 I/O 有数量级的速度提升。而尽可能减少 Index Searcher 的创建和对搜索结果的前台的缓存也是必要的。Lucerne 面向全文检索的优化在于首次索引检索后,并不把所有的记录(Document)具体内容读取出来,而起只将所有结果中匹配度最高的头100 条结果(To-Dos)的 ID 放到结果集缓存中并返回,这里可以比较一下数据库检索:如果是一个 10,000 条的数据库检索结果集,数据库是一 定要把所有记录内容都取得以后再开始返回给应用结果集的。所以即使检索匹配总数很多,Lucerne 的结果集占用的内存空间也不会很多。对于一般的模糊检索应用是用不到这么多的结果的,头100 条已经可以满足 90% 以上的检索需求。

(三)词库查找方法

词库的查找过程其实是一个典型的字典问题(dictionary problem),可以使用三类方法。1.一类是基于单词比较(comparison based)的方法;2.第二类是基于表示法(representation based)的方法;3.第三类则是无需经过任何比较, 一次存取便能得到所查单词位置的散列法。通过对单词 K 作某种算术运算 f(K),计算的结果就是 K 及其相关数 据的存储位置[3]。若对于不同的单词得到同一散列值,便产生了冲突。 冲突会降低查询效率,因此应尽量避免。

参考文献

[1] D.Cutting, J.Pedersen.Optimization for Dynamic Inverted Index Maintenance.in: Proceedings of the 13thAnnual International ACM SIGIR Conference on Research and Development in Information Retrieval.Brussels, Belgium.1990.New York: ACM Press, 1990.405~411

[2]罗晓沛等.数据库技术(高级).北京:清华大学出版社, 1999:102-103. [2] Google 搜索引擎技术实现探究 化柏林 中国科学技术信息研究所

[3]中文搜索引擎技术揭密:中文分词

[4]Lucerne 算法介绍 作者:胡晓光 作者:车东

崔柏(1972-),男,河北联合大学理学院,实验师,本科;研究方向:图书学与信息学技术

全文检索范文第5篇

〔关键词〕双层PDF;全文检索;档案管理;Lucene

〔中图分类号〕TP391〔文献标识码〕B〔文章编号〕1008-0821(2014)06-0075-04

由于档案的凭证性、惟一性和不可替代性,导致用户和档案行业更注重查全率。传统的档案管理手段,由于对标引和著录标准的理解、执行和操作、人员责任心等方面的差异,导致著录信息和检索效果不尽人意。基于Lucene技术,依托双层PDF文档,对结构化和非结构化信息合并管理,在档案管理系统中实现一站式全文检索,具有很重要的现实意义。

1档案检索研究现状

传统档案检索,主要是对档案信息著录和标引进行研究,编制检索目录和目录检索系统,常见的检索工具有主题、分类、字序、文号等多种方式,检索系统有简单检索、复合逻辑组配表达式检索等。著录和标引质量提高,检索工具完备均能提高查全率,但存在缺陷,且效率较低。要实现高查全率,必须研究在档案文档中实现内容检索。

Lucene是一个非常优秀的全文本型检索框架[1],在文本型的全文检索方面得到广泛的支持和运用;然而,对纸质档案进行数字化扫描加工,最好的存储方式仍为图片格式的非文本型文档,要实现全文检索并非易事;基于图像的检索技术的研究也还不成熟,效果并不理想。

2全文检索思想与技术

档案资源数据有多种类型:一是结构化数据,有固定格式和长度,如数据库或者元数据,数据表格等;二是非结构化数据,特点是不定长和无固定格式,如Word、PDF、JPG等文档;三是半结构化数据,如XML、HTML等,这类数据比较灵活,可根据需要按结构化处理,也可按非结构化处理,在使用Web Service方式的系统集成对接时,协议中采用的数据传输格式大多为XML。对于结构化的语句,采用SQL语句很容易实现检索。非结构化的数据,通常称作全文数据,检索方式有两种[2]:一种是顺序扫描法,对每一个文档都从头至尾进行扫描,搜索出包含检索词的文档,如Windows系统中的查找功能,但这种方式,搜索效率低,速度慢;另一种方式便是我们要重点讨论的全文检索。

2.1全文检索思想

由于结构化的数据格式是有规律的,用算法容易实现很高的检索效率。全文检索的基本思想便是:把全文数据中信息提取出来,重新进行组织成索引,使其结构化规律化,再按一定的算法对其进行检索。从过程上来看,可简单地分为索引和检索两个过程,但在实际处理过程中,包含的模块构成有:前端查询平台、中文分词、解析引擎、后台管理等。

2.2双层PDF技术

非结构化的数据,又分为文本型和非文本型。对于文本型或者超文本型的文档,全文检索的研究应用已经比较广泛和成熟。而非文本型的文档无法直接实现全文检索,双层PDF文档技术便是解决这一问题的最佳方式之一。

双层PDF文件是一种包含Text层和Image层的多层结构PDF文件,两层内容位置上相对应,Image层是原始图像,保留了原始档案的效果;Text层是Image层的OCR识别结果,支持选择、检索和复制等功能。通过程序控制可实现两个图层的任意显示和切换,可实现检索词的精确定位。双层PDF文档可以是图像型通过档案数字加扫描加工而成;也可以是文本型,通过文本文件如WORD转换。

2.3全文检索引擎Lucene

Lucene是目前最为流行的基于Java开源全文检索工具包[3]。它并不是一个完整的搜索程序[4],不能直接嵌入系统中使用;而是一个类库,一种思想和架构。Lucene提供简单的工具包,方便软件开发人员在应用系统中实现全文检索功能。Lucene具备五大优点[5]:索引文件格式独立于应用平台;可分块索引,为增量文件建立小索引,通过与原索引合并,提升效率;面向对象的架构,便于扩充;独立的文本分析接口,与语言和文件格式无关;具备强大的查询引擎,包括布尔逻辑、分组查询、模糊查询等,开发人员无需再编写代码。

Lucene的源码由7个模块(包)组成:分词模块、索引管理、检索管理、数据存储管理、查询分析器及公用类库。为了对文档进行索引,Lucene提供了5个基础的类,Document、Field、IndexWriter、Analyzer、Directory。全文检索系统功能强大,实现起来也比较复杂,但从实现过程来看,主要分为索引和检索两大功能。

3全文检索的实现

主要运用lucene技术,基于PDF文档,对中文分词、解析引擎、索引、过滤、专业词库等方面进行了重构与优化,由前端查询、索引模块、分词、搜索引擎、后台管理等模块构成。通过全文检索的分词系统、索引系统、引擎系统将海量数据快速展现在用户面前,并支持多关键词、同义词、近义词等检索。

3.1创建双层PDF全文数据库

建设双层PDF全文数据库是实现全文检索的基础,减少对纸质档案的使用,从某种意义上来说,也保护了纸质档案。市场上已经有许多产品或者生产线,可以实现档案的双层PDF数字化加工。在档案数字化加工过程中,将纸质档案扫描加工后的图片转换处理成双层PDF文档,在挂接到档案管理系统中的相应案卷和卷内文件目录之后,原文的存放地址信息自动存入数据库的原文关系表中,通过ID号(Recid)与案卷和卷内文件目录Recid对应,对档案文档的Text层文本内容及其元数据等相关信息建立永久联系,形成数据包。

基于节约成本和利于管理考虑,对双层PDF文档进行了格式固化,它的Image层是图片格式,与原文件保持一致,可以阅读和打印;Text层支持内容自由复制。为了使系统处理数据方便,我们通过后台程序把上传的其他文本格式的文档也自动转换成双层PDF文档。双层PDF全文数据库不仅为档案在线编研、数据挖掘、开展档案主动服务等打下了基础,全文数据直接利用还使档案得到保护和永久性保存。

3.2创建索引

数字化加工后的双层PDF文件和数据包通过调用全文检索子系统内核函数建立对应的索引文件,抓取和解析数据。本系统中的创建索引的过程,实际上就是将双层PDF文档中的text层、文档对应的卷内目录和案卷目录及有关元数据(也可以说是结构化和非结构化数据)信息提取并创建索引文件的过程。目前,主要有3种索引技术:签名、后缀数组、倒排文档。Lucene采用的是倒排文档,倒排文档的性能和效率都非常高,因而被广泛采用。

索引过程可分为4个阶段:准备待索引文档和数据;对文档进行语法分析和语言处理形成一系列词(Term);经过处理形成词典和倒排文档(索引);通过存储过程将索引写入索引库。具体过程分析如下:

(1)建立索引器indexWriter,生成index对象,把Document对象加到索引中来。

(2)建立信息字段对象Field,描述文档的属性,如文件标题和内容可以用两个Field对象分别描述。

(3)建立文档对象Document,用来描述文档,内容可以从DOC、EXCEL、TXT、HTML、XML等文档及关系型数据库等多种途径获得,一个Document对象由多个Field对象组成的。也可以把一个Document对象看作数据库中的一个记录,而每个Field对象就是记录的一个字段。我们通过编写Object2DocumentUtil.class类来实现数据对象与Document对象的转换。

在文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer类来完成。Analyzer类是一个抽象类,它有多个实现,针对不同的语言和应用需要可以选择适合的Analyzer,本系统中采用的是StandardAnalyzer。Analyzer把分词后的内容交给IndexWriter来建立索引。在分词时,如果用来进行索引的文档不是纯文本,先使用OCR或者其它技术转换成纯文本才能再进行操作。值得注意的是,同一索引,用来建立索引与查询的分词器必须是同一个,才能保证得到正确的查询结果。

(4)将Field添加到Document里面,再将Document添加到IndexWriter里面。

(5)优化indexWriter对象,Directory类代表了本系统索引的存储位置,它是一个抽象类,有两个实现:一个是FSDirectory,它表示一个存储在文件系统中的索引的位置;其次是RAMDirectory,它表示一个存储在内存当中的索引的位置。

创建索引的方法如下:

public void createIndexWriter(String sDir){try{

boolean flag=true;∥标记是否重新建立索引,true为重新建立索引,false表示增量索引

File indexDir=new File(sDir);∥索引文件存放目录

Directory dir=SimpleFSDirectory.open(indexDir);∥创建Directory

Analyzer sAnalyzer=new StandardAnalyzer(Version.LUCENE30);∥分词器

indexWriter=new IndexWriter(dir,sAnalyzer,flag,MaxFieldLength.UNLIMITED);∥索引工厂

}catch(Exception e){logger.error(″indexWriter Exception:″,e);}}

索引创建成功后便生成索引文件,一个索引(index)存放在一个文件夹中,比如文书类的行政档案卷内文件索引为E:/index/T319。基于lucene技术的全文检索,根据不同的配置会产生不同的文件,本系统中的行政卷内文件索引如表1所示。

0.cfx复合文件,当compound启用时,被多个段(Segment)共享的单独文件集添加进独立的compound文件,扩展名为cfx;

2fnm保存域(Field)的元数据信息,一个段包含多个域,每个域都有元数据信息;

2frq词语频率数据文件,记录了词语所在文档的文档列表(docID)和应该词语出现在文档中的频率信息;

3.3索引管理

查看索引,读取指定路径索引中是否存在;索引中包含的文档,词条情况,是否需经过优化等;最后一次修改的时间,路径信息,含有的文档数目等;读取索引词条相关基本信息。

删除索引,删除指定序号的文档之后,自动删除对应的索引文件,编写方法delete(IndexData indexData){}来实现;恢复被删除的文档及索引。

更新索引,更新索引中的某个文档;索引同步处理,用户可根据需要自己定制创建索引时间,可定时或实时更新。增量索引、保存索引、修改索引分别编写方法incrementIndexWriter(String sDir){}、save(IndexData indexData){}、update(IndexData){}调用lucene相应的类,在更新索引时,采用方法closeIndexWriter()来关闭IndexWriter。特别是在update方法中采用indexWriter.updateDocument(term,Object2DocumentUtil.object2document(indexData))来实现,当数据量很大时,采用“删除再创建”效率更高,updateDocument等价于delete(indexData)+save(indexData)。

3.4检索过程及结果处理

全文检索在程序内部实际上是一个复杂的过程,通过分析,可总结为以下步骤:用户输入查询语句;词法分析和语言处理;搜索索引,得到符合条件的文档;对结果的相关性进行排序;将查询结果返回给用户界面。

采用计分器QueryScorer qs来记录结果的相关性(权重值),根据权重值大小在界面上进行排序;采用Lucene处理关键字高亮显示;Highlighter利用段划分器Fragmenter将原始文本分割成多个片段,片段默认的大小为100个字符,将包含检索词的片段显示在检索结果中,便于用户浏览查看选择。系统还需进行特殊字符过滤、多重排序、结果分页等处理。

3.5原文浏览

通过检索过程,在用户界面得到了查询结果。接下来,需要浏览PDF原文,并查出检索词在原文中的具置。我们使用Acrobat Reader,结合档案管理系统,来实现检索词在原文中的自动定位。Reader软件本身对双层PDF文档的查找、文本复制、双层切换等功能都提供了支持,“搜索”窗口允许在多个PDF查找项目。

在全文检索页面,浏览PDF全文是通过在页面内嵌套PDF控件的方式实现。通过程序传递参数给PDF控件,实现检索词在文档中的定位。

而在档案管理系统内部,案卷和卷内目录链接的全文,需要点击链接,通过管理系统内嵌的阅读器来打开,与全文检索页面的实现有些区别。

4一站式智能检索设计

档案管理系统必须具备专业检索和一站式智能检索等检索途径,专业检索提供更为复杂的逻辑表达式组配,适合档案人员处理复杂用户需求时使用;而一站式检索带来的是便捷的用户体验,档案用户不必了解具体的档案分类和细节,通过一个检索入口便可以获得所需的信息。

包含全文检索的一站式检索具备异构档案资源库和分布式资源库处理能力,对结构化与非结构化信息合并管理,对目录数据和原文必须进行同步索引。首先通过JDBC(Java Data Base Connectivity)连接数据库找到要索引的门类,通过卷内文件目录和案卷目录的ID号(Recid),查找原文关系表中的Recid,原文表中的这条记录有文件存放路径(Filepath)等信息,然后根据信息找到对应的原文(双层PDF文档),这样便可以对目录数据和原文进行同步索引。接下来,指定生成Index目录。而在检索时,只需要对索引进行访问,便可以很快的在各类档案目录库和全文库检索到用户需要的信息。

5实现效果

通过测试,系统自动从索引中检索出相关的信息,如果检索词包含在文档中,系统还使检索词在文档中自动定位,免去翻页查找的麻烦。若要缩小检索范围,只需要再增加检索词,检索词之间默认为逻辑“AND”的关系,检索结果按相关度排序,根据文档片段值的大小,将包含检索词的文档片段内容显示在检索结果界面,供用户浏览。

运行表明,基于双层PDF文档技术的一站式全文检索,提高了工作效率。通过对跨数据表,跨数据类型,案卷、卷内目录数据和双层PDF的Text层同步索引,查询时访问索引而不访问数据库,有效减轻数据库和系统的压力。系统可以支持1 000万级的数据,毫秒级的响应时间,每秒500人的并发访问;可以适应不同的操作系统平台,支持多种数据库接口;具备通用搜索引擎的构架和功能,用户可任意输入检索信息,可多关键字、关键词组合搜索。

全文检索是档案管理系统中很重要的检索途径,弥补了目录检索的不足,也解决了目录著录不全、不规范等问题,大幅度提高了查全率。全文检索无须编制任何检索目录,完全实现智能化、高效率检索,极大地提高了工作效率。虽然不同的档案管理系统可能会采用不同的编程语言和技术架构来实现,对Lucene规范中的技术取舍、采用和配置各有不同,但遵循Lucence架构的双层PDF全文检索的总体实现思想大同小异。双层PDF全文数据库为档案编研和数据挖掘提供了资源[6];也为档案信息聚合(RSS)的研究、定向主动的档案信息服务研究或者更深层次的档案服务成为可能。

参考文献

[1]管建和,甘剑峰.基于Lucene 全文检索引擎的应用研究与实现[J].计算机工程与设计,2007,(2):489-491.

[2]forfuture1978.Lucene学结之一:全文检索的基本原理[EB/OL].http:∥/.

[3]胡长春.基于Lucene的中文自然语言搜索引擎[D].上海:上海交通大学,2009:32-35.

[4]解鹏飞.Lucene搜索引擎技术在国家海洋数字档案馆示范系统中的实现及应用[J].海洋环境科学,2008,(8):117-121.

[5]yingsuixindong.全文检索引擎Lucene优点[EB/OL].http:∥/yingsuixindong/article/details/5580983.

全文检索范文第6篇

关键词:全文检索;全文数据库;搜索引擎;文献资源系统

中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)04-0842-04

Application of Full Text Retrieval System on Website

LIANG Yuan-yuan1, HE Wan-wen1, WANG Jia2

(1.Guangdong Meteorological Information Center, Guangzhou 510080, China; 2.Guangdong Meteorological Service Training Center, Guangzhou 510080, China)

Abstract: On the basis of analyzing the Principle of Full Text Retrieval and comparing unusual structure of Full Text Retrieval system, a new design method of Literature Resources System is proposed, which uses Java application development interfaces, the system achieves fast and accurate classification of information resources and comprehensive literature Full Text Retrieval.

Key words: full text retrieval; TRS full text database; search engine; literature resources system

随着企事业单位信息化程度的不断提高,很多单位的核心业务数据都存贮在SQL Server、Oracle、Sybase、Informix、IBM DB2等关系数据库中,而这些数据库系统通常缺乏对存储在其中的数据内容进行有效检索和分析,这使得在数据管理中出现查询数据难,更改数据难等问题,且实际检索效率随着数据的增长而急速下降,尤其对复杂的文本检索问题尤为突出;常见的全文检索系统有TRS, lucene,xapian,sphinx,TRIP,TPI,DESE等,其中,北京拓尔思信息技术股份有限公司的TRS全文检索系统是是国内最为常用、成熟且稳定的信息检索软件,TRS全文数据库系统提高接近100%的查准率,输出结果可按相关度或字段值排序,或者多字段的联合排序,且能够分类检索结果,完全满足电子政务、电子商务等最新需求的数据库系统,基于此,以TRS全文检索系统为平台,利用TRS Java应用开发接口设计了一个文献资源检索系统。

1全文检索系统结构简述

全文检索(Full Text Retrieval)是指利用检索算法(P2P算法、最大熵算法、粒子群优化算法、预估算法等)按照事先建立的索引进行检索,并将文件(包括TEXT、HTML、、S2 /PS2/PS、MARC、Word、Excel、PowerPoint、音视频等多种格式)中所有与检索项匹配的结果快速准确地反馈给用户的检索方法,全文检索系统一般具有完善的非结构化数据管理、高效智能实时的全文检索、强大的企业级应用支持支撑架构、高安全性高可靠性高成熟度及高开放性等功能,全文检索系统结构如图1所示。

在图1中,全文检索系统由查询引擎、文本分析引擎、索引引擎、磁盘索引文件、二次开发接口、WEB应用程序、传统应用程序及其他应用程序等组成,检索引擎是整个全文检索系统的关键,决定着整个全文检索系统的优异程度,常见的检索引擎有Google、ya? hoo、搜狐、百度等。

2常见的全文检索系统对比分析

2.1 TRS系统

TRS(Text Retrieval System文本检索系统)是基于“并行计算”算法的中文全文检索系统,传统的搜索引擎采用”预估”的检索策略,保证不了检索结果的全面性, TRS搜索引擎借助中文处理技术、文本挖掘技术、索引技术等实现了查全和查准的完美结合,在保证查全率的同时,提高了信息的查准率。与其他的全文检索系统相比,TRS系统具有异构资源统一管理,动态索引实时搜索算法,结构化和非结构化数据联合搜索,多服务器集群的高性能可靠的搜索性能。TRS全文检索架构如图2所示,TRS系统系统主要由TRS Database Server(TRS全文数据库),TRS WEB应用服务器(TRS WAS),TRS全文检索网关及TRS管理工具组成。

2.2 lucene系统

Lucene是Apache公司的一个基于Java的开源检索引擎类库,其提供了多个应用程序编程接口函数及多个数据存储结构。Lu? cene的源码主要由7个程序包组成,分别是Org.apache.lucene.analysis(语言分析器), Org.apache.Lucene.store(数据存储管理), Org. apache.lucene.document(文档结构管理类), Org.apache.lucene.search(搜索管理), Org.apache.lucene.indexI(索引管理), Org.apache.lucene. store,util(基础公共类)和Org.apache.lucene.queryParser(查询分析器),这7个程序包的相互关系如图3所示:

2.3 TRS系统与lucene系统对比(表1)表1 TRS系统与lucene系统对比

3文献资料检索系统设计

基于上述全文检索系统分析对比,设计的文献资料检索系统以TRS全文检索系统为平台,利用TRS Java应用开发接口,数据库底层通过TRS GateWay实现TRS与Oracle数据库及时数据更新,数据存储由Oracle完成,信息索引检索工作由TRS完成,可提供网络检索和本地检索方式,方便快捷地完成进精确检索、模糊检索及联合检索,且能实现逐级分类细化检索,最后还能够对检索结果按照相关度、时间进行排序,此外还支持包括TEXT、HTML、RTF、PDF、S2 /PS2/PS、MARC、MS OFFICE(Word/Excel/Powerpoint等多种格式文件的存储、索引与检索。基于对检索方式多样性、查全与查准及平均检索响应时间以及等方面的考虑,采用TRS检索系统作为开发平台,具体包括TRS Web应用服务器、TRS集群服务器组、TRS全文检索网关、TRS全文数据库服务器、和TRS Admin工具三个部分,系统架构如图4所示。

3.1实现方案

1)利用TRS全文检索数据库应用服务器软件,实现对文献资源统一检索平台的检索服务功能;

2)利用TRS全文检索数据库集群软件,实现对服务器组数据库内的文献资源进行存储、检索与全文数据库服务器组之间实现分布式检索;

3) TRS WAS通过设置检索库字段获取TRS Database中指向的表单文件,通过设置数据库字段获取表单文件的字段信息,通过设置概览字段,细览字段、默认检索得到显示信息,此外,还利用TRS WAS抽取TXT、PDF、WORD、EXCEL、POWERPOINT、XML、RTF、HTML、音视频等类型的文本,并装载到TRS Database中;

4)利用内容相关度排序、分词词典、二次检索、渐进检索词根检索等技术,对文献资源元数据内容进行自动分词检索排序;5)利用TRS Admin功能,实现文献资源元数据的添加、修改、删除等维护;

6)利用实时动态索引技术,在数据增改删时能快速响应同步更新索引,而无需重建整个索引,确保了信息的有效性与实时性。

3.2主要功能实现关键技术

常见的TRS编程接口包括:TRS Server,TRS Admin,TRS C API,TRS ADO和TRS JavaBeans。

1)数据库读写操作

利用TRS JavaBeans技术对数据库进行读写操作, TRS JavaBeans技术将逻辑层与表现层相分离, TRS JavaBeans组件封装了与TRS数据库服务器相关的Java类,并为操作TRS数据库提供了统一开发接口,在数据库读写开发中,需要在程序开始处引入trsbean. jar库,对数据库进行操作一般是通过TRSDataBase与TRSConnection类实现,如服务器连接代码如下:

try {//与TRS服务器建立连接

if (TRSConn.connect(ip,端口,”用户名”,”口令”)){ }

else {

out.println("与TRS服务器建立连接失败!\n");

}

} catch(TRSException TRSe) {

out.println("连接失败ResultSet!\n");

}

2)概览与细览功能

概览与细览需要通过包含TRS置标的JSP或HTML文件来实现,TRS置标是控制数据的表现形式,将数据与表现相分离,通过TRS置标添加向导方便的进行模板TRS置标的插入,TRS置标元素可以精确到字段级,常用的置标主要由四种:概览置标,TRS_RE? CORD,细览置标和TRS_TEMPLATE。TRS Javabeans的TRSResultSet对象还提供了丰富的函数可以读取记录的页码信息,如使用getPage可以得到当前记录所在页号,使用GetPageCount可以获取记录集中所包含的记录页数,使用getPageSize可以获取记录集每页所包含的记录数,使用getRecordCout得到记录数,遍历代码如下:

try {

TRSRS = TRSConn.executeSelect(databasename,Select1,"用户名","密码", null, 0, 0, false);

TRSRS.moveFirst();//记录定位

......

TRSRS.close();

} catch(TRSException TRSe) {}

4结束语

从全文检索系统结构出发,分析了TRS全文检索系统,采用全JAVA三层架构,利用TRS Java应用开发接口技术设计了一个基于TRS全文检索系统的文献全文检索系统,借助TRS系统开发网站,可以为网站技术人员节约大量的精力和时间,实现了对海量信息的智能化处理。

参考文献:

[1]杨春雷,陈昕.TRS在吉林省图书馆网站建设中的应用[J].图书馆学研究,2011(22).

[2]梁苑苑,石小英,李娜,等.浅述TRS网站内容协作平台及其数据库的备份[J].电脑知识与技术,2010(34).

[3]梁苑苑,王佳.TRS网络信息雷达系统在新闻网站数据自动化迁移中的应用[J].气象研究与应用,2010(4).

全文检索范文第7篇

目前各行各业都开始意识到信息系统对于行业进步的影响,但是信息系统也存在着很多安全隐患。怎样才能够在文本查询以及网页的存储中达到安全高效的目的,一直是研究和关注的重点,这其中的全文检索技术和全文数据库技术成为了国内外学者研究的热点。我国信息的加密以及检索技术在目前的技术条件下发展十分迅速,并且也出现了诸多领先的技术产品,但是全密文高效检索系统的研究仍旧是当前难以解决的科题。这一问题的难点主要集中在如何才能够安全的实现在外包数据库中进行加密数据的检索以及存储。虽然原始数据具有相似性以及有序性,但是在数据加密后,很多原始特性就会失去,因而密文数据的检索难度便会加大。这也是一直困扰着我国检索系统研究技术人员的主要难点,也正是由于密文数据的这一特性,才提高了数据库的安全性。但是如何才能够在这一条件下,提高检索效率,仍旧需要进一步研究。

2系统比较

2.1传统全文索引

对于数据进行加密是一个很自然的趋势,而对密文检索技术的研究也是索引系统发展的一个趋势,其思路便是加密全文索引,从而实现密文检索。而该种加密方式依照加密粒度的不同可以将密文全文检索分成两种等级,即索引词级信息加密以及索引级信息加密。索引级信息索引直接加密密文信息的明文全文索引,在进行信息检索的过程中首先需要进行解密,即针对密文索引部分内容进行全文解密或部分内容的解密,继而在解密的基础上展开信息的检索。通过这种方式虽然能够达到密文全文检索的目的,但是需要解密后才能够检索,从本质分析仍旧是明文信息的检索,因此安全系数较低,存在隐患问题,并且为了实现索引的解密,需要增量构建,会付出较大的代价。而索引词级信息检索则是在原有检索结构的基础上通过相同的加密算法进行索引词的加密,在原有索引词级信息检索的基础上通过加密信息检索以及同一种加密算法,对原有明文索引结构进行加密,从而实现针对原有的明文检索信息进行加密的目的,实现密文全文检索。当前使用的IR模型大多都采用了索引词级密文索引,建立在Tlken词频信息构建以及便宜地址的基础之上,如果这些内容也被加密,那么在查询过程中的大量运算操作影响下,全文索引系统效率必然会大大降低,如果利用明文索引的形式,信息安全级别便会受到影响,因而传统的索引系统还需要进一步改善。

2.2Mimir密文全文索引

全文检索系统的文档资源都是海量的,全文索引都采用增量方式构建,因此采用一种稳定、高效的数据结构构建全文索引对于实现高效的密文全文检索是非常重要的。由于B+树当节点分裂时只影响原节点和父节点,因此对于全文索引的增量构建在插入索引词时可以有效地保持索引B+树的平衡性,保障全文检索效率。在明文全文检索系统中,基于明文索引中的索引词位置的递增关系,检索系统可以方便地判断一个较长的检索词是否出现在某个文档中,因此在全文检索系统中,索引词的位置信息对于较长检索词的判断是非常重要的。与直接加密索引词改造明文索引的方法不同,为了保证密文索引本身的高安全性,Mimir密文全文检索系统中并没有标识每个索引词的位置信息,因此如何实现较长检索词的匹配就成为了一个关键问题。如果能够在密文全文索引中存储文档所有可能出现的检索词,则就可以不需要索引词的位置信息。但是首先不可能穷举用户可能提出所有查询关键词,而且大量地插入较长的组合索引词也会极大地增加密文索引的空间规模,而导致密文全文检索效率的下降。同时由于被查询命中的概率很小,词长太长的索引词对于全文检索的贡献也比较小,因此必要针对Mimir系统特点设计一种不需要索引词位置信息支持的文档归档索引词提取策。

2.3系统排序算法

全文检索系统大多都被应用于海量文档检索以及处理中,因而同一条查询条件相符的,全文检索系统中需要处理的文档都是海量的,对于一个查询条件来说命中的文档数量也非常大,结果排序就是将用户最感兴趣的内容优先呈现给用户,对于一个全文检索系统的可用性来说是非常重要的。目前的全文检索系统中通常都采用基于检索关键词词频的评分机制。

2.4系统效率以及安全性分析

Mimir实现不脱密的密文全文检索服务,其安全性和搜索效率都非常重要,该节对Mimir密文全文检索系统的检索效率和安全性进行理论分析。Mimir系统有3种数据需要加密处理:索引词、索引指针和文档本身。为保障Mimir系统的安全性,以上都采用成熟的加密算法。Mimir对文档进行归档操作时,索引指针和密文文档的加密量相对很小,而密文全文索引中分词数量很大,因此会产生大量的索引词加密开销。

3结语

在目前海量信息检索以及安全环境下,Mimir密文检索系统意义重大,尤其在密文检索系统效率提升方面具有跨越式的意义。该类系统的研究成果参考价值巨大,并且通过进一步的研究,针对系统中检索环境下的密钥管理以及密文检索功能下访问控制技术都会相应配置完善。并且Mimir还将进一步添加密文索引风险评估系统,从而提高索引系统的风险抗性,保证密文检索的安全度。

全文检索范文第8篇

>> 用JSP调用Lucene包来实现全文检索 基于Lucene全文检索系统的研究与实现 基于Lucene全文检索的设计与实现 对基于Java的全文检索工具包lucene的索引研究 基于Lucene的非结构化文档全文检索系统研究与实现 基于双层PDF和Lucene技术的全文检索研究与实现 基于Lucene站内全文检索系统的设计与实现 基于Lucene的全文检索系统的设计与实现 用JSP实现Cookie技术 Lucene全文检索软件及其在学科信息服务平台中的应用 基于Lucene和Heritrix的全文检索引擎的研究与应用 全文检索引擎Lucene系统模型与应用研究 基于Lucene 的中文分词全文搜索引擎设计与实现 基于本体和Lucene的语义检索模型设计与实现 全文信息检索引擎框架系统设计与实现 基于SQLite的中文全文检索研究与实现 小型中文全文检索系统的设计与实现 用C++Builder实现对PowerPoint的调用研究 JSP+oracle实现小型多关键字检索模块 用FSO实现网站图片的检索 常见问题解答 当前所在位置:,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。

1.3 Lucene

Lucene是Apache的开源项目,是用Java写的全文索引引擎工具包。它提供了许多简单实用的API,用这些API,就可以方便的嵌入到各种应用中,对任何基于文本的数据进行全文检索。

Lucene是用Java写的,它的运行、调试都需要有JavaSDK。Lucene的下载、安装、使用见网站:文件,加入调试好的全文检索程序*.java和相应的JSP标记(tag);

(3)Web应用程序:Tomcat提供网络应用开发服务平台,在它的基础上执行*.jsp,最后的程序以*.jsp的形式出现,执行时先启动Tomcat,设定好端口,在地址栏输入相应的*.jsp。

2.2 全文检索实现主要部分的核心代码和相应分析

一个全文检索系统的核心部分是建立索引,形成索引文件,然后依据客户输入的索引关键字(词),再查找索引文件,形成对应,最后按客户的要求返回检索结果,好的检索程序应提供良好界面便于客户查看检索结果。

下面附具体实现对应各主要部分的核心代码和相应分析。

2.2.1 建立索引

程序中所用类别:

page import=“java.io.*,org.apache.lucene.analysis.*,org.apache.lucene.document.*, org.apache.lucene.index.*,org.apache.lucene.searchh.*,org.apache.lucene.queryPamer.*,.ChineseAnalyzer, org.apache.lucene.store.Directery, org.apache.lucene.store.FSDirectory

(1)建索引的子程序

public void indexDocs(IndexWriter writer,File fileFile)throwsIOException{

∥do not try to index files that cannot be read

if(fihFile.canRead())

}

if(fileFile.isDirectory()){

String[] files=fileFile.fist();

∥an IO error could occur

if(files!=null)}

for(int i=O;i<files.length;i++){

递归调用,用于对于文件夹中文件的添加

indexDocs(writer,new File(Filefile,fries[i]));}

//Document表示一条被索引的记录,对应本程序即为一个文件,doc.add()语句应用不同的模式加入文件的不同对象(文件名、所在文件夹、文件内容)

Document doc=new Document();

String fdeName=fdeFile.getName();

String dirName=fileFile.getPath()。subetring(15);

doc.add(new Field(“flleName”,fdeName,Field.Store.YES.Field.

Index.UN_TOKENIZED));

doe.add(new Field(“directoz7”,dirName,Field.Store.YES,Field.

Index.UN_TOKENIZED):

doc.add(new Field(“content”,new lnputStreamReader(new Fileln-putStream(fdeFile),“gb2312”)));

//IndexWriter专门用于索引文件的写入操作;根据开始部分定义IndexWfiter writer,writer为IndexWriter对象writer.addDocumem(doc);

(2)索引建立的主体部分(含对以上子程序的调用)

//StandandAnalyzer是一个标准分析器,用于对要索引的内容进行切分处理,应用对象为英文,全文检索程序需要对网站内大量数据进行检索,应用对象为中文.ChineseAnalyzer为中文分析器.

Analyzer analyzer=new ChineseAnalyzer();

IndexWriter iwriter=new IndexWriter(“webapps/search/testindex”,analyzer,true);

iwriter.setMaxFieldLength(25000);

//对子程序的调用

全文检索范文第9篇

关键词:全文检索系统;功能比较

中图分类号:G633 文献标识码:A 文章编号:1003-2851(2012)-12-0189-01

一、CNKI数据资源系统的概述

CNKI是中国知识基础设施(China National Knowledge Infrastructure)工程,由清华大学中国学术期刊(光盘版)电子杂志社,光盘国家工程研究中心和清华同方光盘股份有限公司联合建立,从1999年3月正式开始实施。该系统为国内的各级政府职能部门、高等院校、科研院所、学术机构等出版的重要会议论文集,内容覆盖理工、农业、医药卫生、文史哲、经济政治法律、教育与社会科学综合等各方面。

KI全文数据库的种类

目前,中国的网络版数据库每日更新。其主要的数据库包括以下几种:

(1)中国期刊全文数据库。

(2)中国优秀博硕士论文全文数据库。

(3)中国重要报纸全文数据库。

(4)中国重要会议论文全文数据库。

(5)中国科学文献计量评价数据库。

KI全文检索系统的收录状况

CNKI数字图书馆具有翔实的文献资源基础。它囊括的资源总量达到全国同类资源总量的80%以上。在此基础上,CNKI组织各学科专家对文献中的知识进行提炼,并通过知识元链接、引文链接等技术,将文献间的知识关联起来,使收录的知识资源形成了具有内在联系的知识网络整体。

KI全文检索系统的范围

经过多年的努力,CNKI数字图书馆已经建成了世界上全文传息量规模最大的“CNKI数字图书馆”,内容涵盖我国自然科学、工程技术、人文与社会科学期刊、博硕士论文报纸、图书、会议论文等公共知识信息资源,用户遍及全国和世界多个国家和地区,基本实现了中国知识信息资源在互联网条件下的社会人共享与国际化传播。

KI全文检索系统的功能

CNKI数据库还具有引文链接功能,利用该功能进入中国期刊全文数据库网的用户可构建相关的知识网络,还可用来进行个人机构、期刊、论文等方面的计量分析与评价。

5.全文检索系统的特点

全文检索系统的特点有以下几点:

(1)CNKI全文检索系统将中文自然语言处理技术应用在检索技术中,采用多种信息检索模型,能够有效地提高检索的准确率。

(2)CNKI全文检索系统以词为索引基础,而不是单个汉字。

(3)CNKI全文检索系统支持大数据量的网页、文本索引。

二、万方数据资源系统的概述

万方数据资源系统(China Info)是北京万方数据有限公司在中国科技信息研究所数十年积累的全部信息资源的基础上建立起来的,形成以科技信息为主,集经济、金融、社会、人文信息为一体,实现网络化服务的信息资源系统。

1.万方数据库的收录情况

万方数据自有版权以及与合作伙伴共同开发的数据库总计110多个,内容涉及自然和社会科学各个专业领域,收录范围包括期刊、会议文献、科技报告标准、专利、连续出版物和工具书等,用户既可单库、跨库检索,也可以所有数据库中检索,同时还可以按行业需求进行检索。

2.检索系统的功能特点

这几年万方数据库在不断的改进,其功能也有了很大的变化。它的各功能特点如下:

(1)强大的信息采集能力。

(2)分秒级的实时检索。

(3)快速的检索响应 。

(4)全面的检索功能。

(5)精确的检索结果。

(6)丰富的检索结果展示。

三、CNKI与万方的功能比较

CNKI与万方的功能相比较,万方数据资源网络数据库具有全面的信息服务平台,可为用户提供准确、全面、详实、快捷的检索服务,为用户提供一般的检索和专业检索功能。一般检索可以采用字段检索、全文检索以及高级检索(逻辑检索),专业检索支持布尔检索、相邻检索、截词检索、同字段检索、同句检索和位置检索等全文检索技术,具有较高的查全率和查准率。数字化期刊检索系统提供分类检索、高级检索和期刊引文检索三种方法。而CNKI文献资源数据库则涉及理工、农业、医药卫生、文史哲、经济政治、法律、教育以及社会科学等各个方面,其综合能力较强,具有便捷多样的检索方式,准确的结果定位,如:全文检索就可以让用户凭借对所查找文献的模糊记忆,输入多个关键字,即可快速检索定位到该文献资料。同时还具有丰富的信息利用功能,表现的显著特点是帮助用户便捷有效地对信息资料进行管理,同时辅以多种信息利用功能。而且还具有系统伸缩性强布置方式灵活等特点。系统采用“部分集中”的分布式数据库处理方式,适用中小学多媒体数字图书馆、中国医院知识仓库、中国企业知识仓库、中国城市规划知识仓库以及政府职能部门等用户部署的需求,既提高了共度数据的访问效率,又有效解决了数据冗余问题,大大降低了硬件设备的建设成本。

1.两大系统检索效果的比较。对于两大数据库,在设定相同检索条件的情况下(检索入口和检索限定一致),分别选择“题名”、“关键词”、“著者”和“分类”等四个检索入口进行检索。然后通过检索返回数量统计表中的数据分析,可以得出这两种数据库的自身特点、收录的范围和学科类别的情况。

2.全文浏览的比较。两个数据库中的文献都可以浏览原版的图像全文,也可以用文献浏览器上提供的OCR识别系统进行文字识别处理文献。其中“万方”使用Acrobat Reader浏览器打开单。从数字化水平来说,万方的数字化技术在二者中是最好的,它所用的是全球通用的PDF格式全文,方便交流,从打开的页面上看,制作得也比较精细。CNKI所用是自己公司生产的浏览器,文献页面存在一定的缺陷。当然数据库数字化的水平也在不断进步中。不过未来的趋势就是各个全文数据库都会提供通用的PDF格式的全文,并最终过渡到统一的格式。

3.显示、排序与去重功能比较。“CNKI”的检索结果是按照主题的相关度和文献的日期排序输出,可以设定每页显示文献的数量。“万方”在初次检索时不能设定检索结果显示的顺序,但在二次检索中可以设定是通过“升序”或“降序”排列。

4.文摘结果显示比较。通过文献的文摘就可以了解一篇文章的基本情况,而不用浏览全文,这样科研人员就可以通过浏览文摘了解是不是自己找的文章,可以节约大量的时间。两个数据库中文摘做得最好的是CNKI,不仅可以从中获得文献的基本情况,而且能通过超级链接的方式,找到更多与查找主题相关的内容。

总之,国内的这两大全文检索系统已经成功的在各类信息机构、高等院校、公共图书馆、网站、政府部门等企事业单位进行各种应用。到目前为止,这两大检索系统已经承受了千万级单容量的商业应用,并表现出了卓越性能,为用户提供了便捷、高效的在线检索功能。

参考文献

[1]祁延莉,赵丹群.信息检索概论[M].北京大学出版社,2006.

[2]王付军,童静原.中文全文检索系统在服务行业中的应用,2006.

全文检索范文第10篇

[关键词] Lucene 信息检索 全文检索 索引

一、引言

计算机技术及网络技术的迅速发展,使得Internet成为人类有史以来资源最多、品种最全、规模最大的信息资源库。如何在这海量的信息里面快速、全面、准确地查找所需要的资料信息已经成了人们关注的焦点,也成了研究领域内的一个热门课题。这些信息基本上可以分做两类:结构化数据和非结构化数据(如文本文档、word文档、PDF文档、HTML文档等)。现有的数据库检索,是以结构化数据为检索的主要目标,实现相对简单。但对于非结构化数据,即全文数据,由于复杂的数据事务操作以及低效的高层接口,导致检索效率低下。随着人们对信息检索的要求也越来越高,而全文检索因为检索速度快、准确性高而日益受到广大用户的欢迎, Lucene是一个用Java写的全文检索引擎工具包,可以方便地嵌入到各种应用中实现针对应用的全文索引和检索功能。这个开源项目的推出及发展,为任何应用提供了对非结构化信息的检索能力。

二、全文检索策略

通常比较厚的书籍后面常常附关键词索引表(比如,北京:12,34页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样,由于数据库索引不是为全文索引设计的,因此,使用like “%keyword%”时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,like对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like“%keyword1%”and like “%keyword2%”……其效率也就可想而知了。

所以,建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。

三、 Lucene全文检索

1.Lucene简介

Lucene是一个高性能的、可扩展的信息检索工具包。它提供了一套简单却十分强大的核心API,你可以把它融入到应用程序中以增加索引和搜索功能。Lucene是一个纯Java实现的成熟、自由、开源的软件项目:它是备受程序员欢迎的开源项目组织Apache Jakarta的成员项目,基于Apache软件许可协议的授权。

2.Lucene工作原理

Lucene的API接口设计得比较通用,输入输出结构都很像数据库的表一记录一字段,很多传统的应用文件、数据库都可以方便地映射到Lucene的存储结构和接口中。Lucene的检索本质属于索引检索,即用空间来换取时间,对需要检索的文件、字符流进行全文索引,在检索的时候对索引进行快速的检索,得到检索位置,这个位置记录检索词出现的文件路径或者某个关键词。

总体上可以认为Lucene是一个支持全文索引的数据库系统。

3.Lucene系统结构分析

Lucene全文检索系统主要有两个功能:一是建立索引库,就是将待索引的数据源经过解析器进行解析,将其内容经切分词后索引入库;二是检索索引库,即根据用户输入的查询条件从索引库中找出符合条件的文档,将结果通过一定的顺序进行排序返回给用户。

Lucene的源码中共包括7个包,每个包完成特定的功能,见表1。其核心类包主要有3个: org.apache.1ucene.analysis;org.apache.lucene.index;org.apache.1ucene.search。

其中,org.apache.1ucene.analysis主要用于切分词,默认的语言为英文,提供德语与俄语的分析器,其他语言可以通过扩展Analyzer类来实现。

4.Lucene的优势

由于Lucene存放的索引信息不是一般数据库,而是文件,这使得Lucene访问索引的时间快,同时也使得Lucene可以跨平台使用。Lucene与大部分的搜索(数据库)引擎不同,不是采用导致索引的更新会需要大量IO操作的B树结构来维护索引,而是在扩展索引的时候不断创建新的索引文件,然后定期把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整,策略可以定制)。这样在不影响检索的效率的前提下,提高了索引的效率。

以上所述,Lucene具备源代码开放、跨平台、不限定数据源、易扩展、索引效率高等优点,很适合用来构建全文检索系统。

四、系统设计与实现

本文用Lucene为核心开发了全文检索系统。本服务平台核心模块由四部分组成:解析转换器,索引器,检索器,用户界面。

1.解析转换器

分析XML,PDF,HTML,WORD等多种格式文件从中提取链接和文件各字段内容以进行索引,每一种格式文本都使用了一个第三方工具来提取文本。其中,用SAX API解析XML文档,PDFBox解析PDF, NekoHTML解析HTML,使用POI解析Word文档等。

2.索引器

从命令行读取文件名(多个),将文件分路径(path字段)和内容(body字段)2个字段进行存储,并对内容进行全文索引:索引的单位是Document对象,每个Document对象包含多个字段Field对象,针对不同的字段属性和数据输出的需求,对字段还可以选择不同的索引/存储字段规则。

3.用户界面

输入用户查询关键词,显示返回结果,图3是输入关键字“抗体”的实际运行结果。

五、结论

上一篇:检索工具范文 下一篇:检索策略范文

友情链接