基于PHP的统一检索系统的设计与实现
摘要: 通过 设计统一检索系统过程模型,对 网络数据库的检索步骤进行抽象,并 对 网络数据库进行描述,获取网络数据库的检索参数, 实现在 PHP5.0 环境下 网络数据库的统一检索,提高用户检索效率 。 采用 PHP 5.0 开发程序,优势在于优异的字符运算处理速
摘要:通过设计统一检索系统过程模型,对网络数据库的检索步骤进行抽象,并对网络数据库进行描述,获取网络数据库的检索参数,实现在PHP5.0环境下网络数据库的统一检索,提高用户检索效率。采用PHP 5.0开发程序,优势在于优异的字符运算处理速度和可靠性,通过与Apache 2.0 Web服务器相结合使得统一检索系统具备良好的性能和稳定性。同时,通过构造一个合理的四元组模型实现统一检索系统完整的二次检索。
关键词:统一检索 PHP CURL 稳定性 二次检索
1 引言 近年来,随着数字图书馆的发展,高校或公共图书馆购买、引进了许多大型专业数据库,如SCI、EI、中国学术期刊等,另一方面,各个图书馆提供的OPAC资源也越来越丰富,如此丰富的信息资源和众多的检索途径,为用户快速有效地获取真正所需的文献带来了很大的困难。为了查找所需文献,用户不得不对各个数据库逐一查找和借助网络搜索引擎进行搜索,而得到的却是纷繁复杂的检索结果,检索效率难以达到预期目标,主要原因在于: ①数据库系统的异构性和分布性; ②各数据库彼此独立,用户无法同时检索多个网络数据库,检索结果相对分散; ③各数据库的检索依托于特定的检索系统,用户难以理解并掌握众多的检索入口及语法; ④网络搜索引擎无法访问动态页面,这为以后台数据库做支持,依靠接收用户请求表单中的信息而动态生成Web页面的检索造成了很大的困难; ⑤某些数据库具有特定的使用权限要求,用户需要在不同的系统间重复注册,增加了用户负担。 针对上述问题,近年来,对异构数据库的集成检索日益得到关注。国内外的相关研究也取得了一定的进展。利用跨库集成检索系统,用户通过一个单一友好的界面,一次向多个Web数据库、搜索引擎提交检索请求,获取更为准确、有序的检索结果。以期在较高查全率下达到较高的查准率和检索效率[1]。 2 统一检索系统的过程模型设计 由于各专业数据库和搜索引擎有不同的检索语法和操作符使用规则,在用户确定检索词及基本检索路径后,需要对“提问”进行分析处理。对目标系统不能处理的检索方式进行排除,并选择一种合适方式来匹配,最后根据不同的系统分别转换成可实现检索表达式,有针对性地将“问题”提交给所选定的目标系统,以获取最佳检索效果。
这个模型是四层:客户端,WEB服务器,应用服务器和资源层。用户只需要在客户端设定好检索信息后(包括检索词和资源选择),利用HTTP协议发送检索请求,检索请求信息传输到应用服务器后,在这里对检索请求进行分析,然后通过ODBC或JDBC访问本地数据库,HTTP协议访问WEB检索系统和Z39.50访问远程资源,得到检索结果后加以整理,然后通过WEB服务器传到客户端。很显然,在这个模型中用户只需要一次设置,一次检索,最后一次就可以得到在传统检索中多次检索才能得到的检索结果,检索效率得到了很大的提高。
3 统一检索系统的实现
3.1 PHP
由于PHP建立在行业标准和Internet标准之上,集成了一些常用的Internet组件,如:CURL,采用性能优异的CURL访问组件,该组件远程访问速度比传统方式速度快了近200倍,采用FOPEN方式对于100个HTTP文件请求每分钟只能打开10个,而采用CURL组件方式对于2000个HTTP文件请求每分钟可以打开2000个[3]。此外PHP可以非常方便地处理与HTTP协议有关的一些操作。另外,采用面向对象和基于类库的设计可相当方便地将系统以Web应用或Web Service形式发布。跨库检索系统实现的难点主要在于性能和稳定性的实现,采用PHP5.0作为开发工具,优势主要在于优异的字符运算处理速度和可靠性,通过与APACHE 2.0 Web服务器的组合使得跨库检索系统具备了良好的稳定性和性能[4]。
基于上述理由,我们决定采用PHP5.0作为开发工具来实现统一检索系统。
3.2 网络数据库的描述
在跨库检索系统对各网络数据库进行处理之前,首先需要一种方法来描述各数据库的配置信息。我们采用了SQL SERVER 2000来存储各数据库的配置信息,主要存储了以下信息:
①数据库基本信息,包括数据库在系统内部名称(英文)、对应模板、在原始检索系统中的内部数据库名称、字段映射解析类型、数据库中文名称、提供商、检索字段、原始网址、数据库类型、数据库语种等。
②数据库模板字段映射基本信息,包括检索项、检索关键词、附加查询字符串、字符编码方式、翻页参数等。
③数据库模板检索表达式信息,包括二次检索时逻辑与或非的表示等。
④得到元数据引用点等信息,包括检索结果每页显示条数、命中记录数周围内容、检索结果数据引用点位置、原始网络数据库起始页码、原始网络数据库翻页增量、数据引用点表格头信息、详细信息(点击篇名后)数据引用点位置等。
⑤得到检索结果的过程描述信息,包括数据库首页的浏览、登录以及提交检索条件、填写数据库检索条件等过程。
⑥得到详细信息(点击篇名后)的过程描述信息。
⑦得到全文的过程描述信息。
3.3 统一检索系统的程序实现
(1)网络数据库的检索参数分析
如果我们知道所要检索的网络数据库的URL和查询字符串的构成,那我们就可以通过HTTP协议来访问已有的网络数据库。我们就以我所的清华同方CNKI中国学术期刊全文数据库为例。
我所清华同方CNKI中国学术期刊全文数据库的镜像地址是:http://cnki.gsinfo.net.cn/kns50/Navigator.aspx?ID=1。
打开这个网页,我们可以看出,它可供选择的参数有:论文范围,排序,匹配模式,论文年度,每页显示记录数,最后就是布尔检索的设置,最多可设置5个。我们还要分析网页中的JavaScript代码,看看这些检索参数是如何编码然后传送到WEB服务器的。一定要注意里面的隐藏参数,同时要注意表单的提交方式(POST或者GET),为了得到所有查询字符串参数,可以借助于工具软件Sniffer来获取。经分析得到的参数如下:
ID=1 //代表当前检索的是中国学术期刊全文数据库
order=dec //代表检索结果按降序排列
searchmatch=1 //代表检索匹配方式为精确
yearstart=1979 //代表检索起始年限为1979年
yearend=2006 //代表检索终止年限为2006年
RecordsPerPage=20 //代表检索结果每页显示20条
SearchRange=All //代表检索范围为所有专辑
searchInResult=0 //代表不是在结果中检索
TableType=PY
display=Chinese //代表检索结果显示为中文
encode=gb //代表检索结果编码方式为gb2312
userright=
VarNum=1 //代表检索项为1
hdnIsAll=true
NaviField=
NaviDatabaseName=CJFDZJCLS//代表当前检索数据库导航名称是中国学术期刊全文数据库
systemno=
hdnFathorCode=sysAll
TablePrefix=CJFD
advancedfield1= //代表检索项,如:篇名
advancedvalue1= //代表检索关键词,如:计算机
(2)网络数据库的代理检索程序实现
以下是代理检索程序的简单实现:
$url = “http://cnki.gsinfo.net.cn/brief.aspx”;
$param = "data1=" . $data1 . "&data2=" . $data2; //POST数据生成
ob_start(); //打开输出缓冲区
$ch = curl_init(); //初始化会话[5]
curl_setopt( $ch, CURLOPT_URL, $url ); //设定目标URL
curl_setopt( $ch, CURLOPT_HEADER, 0 ); //设定HEADER(无)
curl_setopt( $ch, CURLOPT_POST, 1 ); //设定表单发送方式为POST
curl_setopt( $ch, CURLOPT_POSTFIELDS, $param ); //POST数据
curl_exec( $ch ); //发送请求
$retrievedhtml = ob_get_contents(); //返回内部缓冲区的内容
ob_end_clean(); //删除内部缓冲区的内容并关闭内部缓冲区
curl_close( $ch ); //会话结束
… //对$retrievedhtml进行分析、处理得到元数据
?>
现在提取的信息就在$retrievedhtml中,然后就可以对页面内容进行分析,得到元数据和检索的格式。HTML文件进行分析,我们就可以得到我们所要的详细信息,然后将它显示出来。有全文的就可以得到下载全文的信息。
目前的检索系统都应用了Session技术,为了解决Session过期的问题,我们采用了检索时一次性释放检索系统Session会话的机制,当翻页时再次建立检索系统Session会话。
4 结语
本文介绍了基于PHP的统一检索系统的设计与实现,它能满足网络数据库跨库检索的需要。但由于从各个数据源直接检索得到的结果存在一定的重复性和无序性,需要对其加工处理,主要包括:结果去重,即删除可能被多个独立系统同时检出的结果记录;结果排序,指根据记录的发布时间及相关度作出判断,来比较各个目标系统得到的记录并进行重新排序。这些功能的实现通常由系统通过Agent把检索结果以某种统一元数据形式建立临时数据库,并对其进行筛选、排序,然后以XML文档形式反馈给用户。此外,系统可以使用XML进行网络数据库的描述及实现,为了节省用户总的检索时间,可以实现并发检索,虽然PHP不支持多线程,但目前PHP可以嵌入JAVA,并发检索可以由JAVA来实现。这些有望在系统的下一版本中实现。
参考文献:
1刘晓娟. Web资源集成中的XML应用研究与实现. [D]. 北京:北京师范大学,2004.
2朱虎明.数字图书馆中统一检索系统的研究与开发. [D].西安:西安电子科技大学,2004.
3 http://curl.haxx.se/libcurl/php(Accessed Jan.9,2007)
4曹方,施韶亭.基于Web过程模拟的异构数字文献统一检索系统设计与实现[J].情报学报,2006,25(5):575-579.
5 http://cn.php.net/manual/zh/ref.curl.php(Accessed Jan.9,2007)
上一篇: discuz关于发帖数据保存功能
推荐阅读
-
基于Silverlight DataGrid中无代码设置开始与结束日期DatePicker的实现方法
-
ios的collection控件的自定义布局实现与设计
-
ios开发:一个音乐播放器的设计与实现案例
-
PHP实现基于mysqli的Model基类完整实例
-
基于JTable的列宽与内容自适应的实现方法
-
python五子棋游戏的设计与实现
-
支持windows与linux的php计划任务的实现方法
-
基于Silverlight DataGrid中无代码设置开始与结束日期DatePicker的实现方法
-
ios的collection控件的自定义布局实现与设计
-
基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例