基于分面搜索引擎Solr的机构知识库访问统计*
姚晓娜, 祝忠明
中国科学院国家科学图书馆兰州分馆 兰州 730000
摘要

采用Solr对中国科学院机构知识库CAS-IR的访问统计部分进行改进,结果表明改进后的系统即使在海量数据的环境下也能达到很快的响应速度。

关键词: Solr; 分面搜索; 访问统计; 机构知识库
中图分类号:G250.76
Usage Statistics of Institutional Repository Based on Faceted Search Engine Solr
Yao Xiaona, Zhu Zhongming
The Lanzhou Branch of National Science Library,Chinese Academy of Sciences, Lanzhou 730000, China
Abstract

This paper adopts Solr to improve the usage statistics of Chinese Academy of Sciences Institutional Repository. The results show that the improved system can achieve fast response speed even on massive data.

Keyword: Solr; Faceted search; Usage statistics; Institutional repository
1 引言

机构知识库是大学或研究机构通过网络来收集、保存、管理、检索和利用其学术资源的数据库。它具有学术传播、电子出版、长期保存、知识管理、促进教育、科研评价、共享利用等功能[ 1]。机构知识库的访问统计[ 2]可以帮助管理者更好地了解知识库的访问利用情况,如哪些学术资源是用户比较感兴趣的、哪些时间段访问人数比较多等。

通用的网站访问统计工具,如AWStats[ 3]、Google Analytics[ 4],主要统计的是网页或文件的访问量,无法统计机构知识库中某个专题或条目层次的访问。因此,机构知识库的访问统计一般自行开发。目前的统计方式主要是直接读取日志文件进行统计,或者是将日志中的访问数据导入到数据库中,再从数据库中进行统计。前一种方式由于速度较慢,一般只用于离线分析。后一种方式需要定期进行数据导入,导致统计结果的实时性不够,而且随着系统运行时间变长,访问数据越来越多,数据库的负担较重。

基于分面搜索引擎Solr对海量数据的良好支持和快速查询响应性能,本文采用Solr对中国科学院机构知识库CAS-IR的访问统计部分进行了改进。

2 Solr介绍

Solr(Searching on Lucene w/Replication)[ 5]是Apache软件基金会下的一个开源子项目。它是一个高性能的、强大的、基于Lucene全文搜索库的独立运行的企业搜索服务。它对外提供类似于Web-Service的API接口,使用者通过HTTP协议与Solr服务器进行交互,提交索引内容和进行查询。

Solr的系统结构[ 6]图1所示:

图1 Solr的系统体系架构

顶层为对外的HTTP请求处理服务,负责通过HTTP协议接收或返回XML文档,与外部操作进行交互。中间层为文档处理分析层,对文档进行相应的处理后交予 Solr核心层进行文档分析、建立索引,并将搜索到的结果组织成 XML返回。最底层为 Solr核心层和Lucene,所有的文本分析、索引建立、索引查询都是在这里进行处理。Solr还提供了主-从索引复制机制,以便在大规模的应用中分散查询负载。

Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。不仅如此,Solr还是一个强大的分面搜索引擎,它对于分面搜索的支持使得Solr可对数据之间的内在联系进行挖掘,可作为海量数据的统计工具。

分面搜索(Faceted Search),也称分面导航(Faceted Navigation)或分面浏览(Faceted Browsing),是一种按照分类法进行存储和搜索信息的技术。分面是指事物的多维度属性,例如一本书包含主题、作者、年代等分面。而分面搜索是指通过事物的这些属性不断筛选、过滤搜索结果的方法[ 7]

Solr对于使用自建的集合类,能够提供高效的分面结果计算。用户可以在查询请求中指定分面,Solr通过计算不同结果集合之间的交集来获得不同分面下的记录数,从而提供快速直接的导航功能。用户可以指定按照某一分面返回搜索结果,结果中除按时间分面外,一般按照该分面不同值的记录数从大到小排序。

3 基于Solr的机构知识库访问统计
3.1 系统架构图

本文在原有机构知识库系统CAS-IR的架构上,嵌入Solr服务,并进行了基于Solr的访问统计相关功能的开发,改进的系统架构如图2所示:

图2 系统架构图

Solr服务主要包括服务器、客户端以及数据库三个部分。Solr作为一个独立运行的HTTP服务器,需要在Web服务中搭建相应的应用服务器。本文采用的是基于Java的Tomcat服务,首先从Solr的官方网站下载最新的Solr包,复制到Tomcat的Webapps目录下,启动Tomcat,在浏览器地址栏中输入http://localhost:8080/solr,出现Solr的管理界面表示安装成功。

为了实现机构知识库服务器和Solr服务器的HTTP通信,还需要在机构知识库服务器中嵌入Solr客户端。Solrj是Solr广泛提供的基于Java的Solr客户端,提供完善的Solr操作API,只需把Solrj的Jar包加入机构知识库程序的Lib库中即可。

此外,还需要建立Solr数据库,存放Solr的数据和索引。Solr服务器的web.xml中指定了Solr数据库的存放位置,配置字段如下:

solr/home

java.lang.String

${dspace.dir}/solr

其中,env-entry-value字段表示Solr数据库的本地路径,本文将数据存放到了机构知识库CAS-IR的文件夹下。

3.2 实时访问数据记录

对于用户通过Servlet进行的访问请求,系统首先判断请求的内容是否需要记录。本文只记录访问部门、专题、条目以及文件等机构知识库特有对象的请求。针对每个访问请求,记录来访者的IP地址、访问时间、来访国家、来访域名、是否为机器访问、是否为内部访问、访问对象的类型、访问对象的ID、访问对象所属条目的ID、访问对象所属专题的ID、访问对象所属部门的ID、访问对象所属内容类型等信息。

其中,来访国家是通过国际地理数据库GeoIP.dat,将IP地址映射到某个国家或地区;来访域名是通过查询DNS服务器来获取;是否为机器访问是根据自定义的各大搜索引擎的IP地址列表来判断;内部访问是研究机构用于区分访问是来自于机构外部还是内部,根据自定义的IP段列表来判断;根据访问请求的内容,可以得到具体的访问对象。访问对象可以是部门、专题、条目或文件,这4种对象之间存在归属关系,如专题是属于某个部门的、文件是属于某个条目的,而在统计某个对象的访问量时,也应当包括它所有子对象的访问量。因此,还需要记录访问对象所属对象的信息。例如,如果下载了机构知识库中的某个文件,那么除了记录文件的ID之外,还需要记录该文件所属条目的ID、所属专题的ID、所属部门的ID。此外,在机构知识库中,通过内容类型来划分条目,如某个条目属于期刊论文还是研究报告。因此,还记录了访问所属的内容类型。

这些信息字段在Solr中映射为分面参数,需要预先定义好。Solr的分面配置在Solr数据库本地路径中conf文件夹下的scheme.xml中,配置参数如下:

其中,字段owningComm、owningColl、owningItem的multiValue = "true"表示该字段的值可以是多个。

在得到上述对应信息之后,调用Solr客户端生成Solr索引文档,并将文档提交给Solr服务器,这样就完成了实时访问数据的记录。

3.3 实时的访问统计

在访问统计界面的设计上,笔者采用了自定义统计条件的方式,使得用户可以从各种角度进行统计。统计条件主要包括统计对象、内容类型、统计时间、详细统计、排行标准、机器访问和内部访问等选项。

在中国科学院机构知识库CAS-IR中,顶层的对象是整个网站,其下分为若干个部门。每个部门下包括若干个专题;专题下包括若干个条目;条目又包括若干个文件。用户不仅仅关心整个网站的访问情况,还会从某个部门或专题的层次进行统计。因此还提供了统计对象的选择,可选择具体的某个部门、专题或条目进行统计。详细统计选项包括了按年统计、按月统计、按日统计、部门排行、专题排行、条目排行、域名排行、内容类型排行以及国家和地区排行。考虑到显示问题,条目排行最多统计前1 000个条目。排行标准包括访问量和下载量,下载量是指对文件的访问量。

访问统计的过程也是对Solr的搜索过程,系统首先根据统计条件的组合生成搜索语句并指定搜索的分面,然后调用Solr客户端将搜索请求发送给Solr服务器,Solr客户端将服务器返回的结果解析成可直接读取的数据结构,系统将统计结果以列表和图形化的方式显示到界面上。统计结果列表中还提供进一步的链接,使得用户可查看更具体的统计结果。如图3所示,统计的是2011年第一季度内容类型为期刊论文的专题访问排行。其中,专题的访问量包括了该专题所有条目和文件的访问量,搜索的分面是访问对象所属的专题(owningColl)。

图3 2011年第一季度内容类型为期刊论文的专题访问排行

3.4 历史数据的导入

为了在系统升级时兼容原有的访问数据,系统还开发了对历史数据的导入功能,主要针对日志文件和关系数据库中的历史数据。具体实现与实时访问数据的记录类似,先按照Solr分面参数对历史数据进行转化,然后生成Solr索引文档,并提交给Solr服务器。

此外,在实时访问数据的记录中,系统还加入了对重复点击的过滤,即在指定时间阈值内同一IP地址对同一对象的多次访问只记录一次。时间阈值可配置,默认为60秒。在性能方面,本文使用改进后的系统对40多万条访问数据进行了统计测试,平均响应时间低于2秒。

4 结语

Solr特有的分面搜索技术使得其方便地应用于海量数据的统计分析,本文将Solr应用到机构知识库的访问统计中,简化了访问统计的开发过程,大大提高了访问统计的速度。此外,由于Solr的分面参数可配置,数据内容跟逻辑层完全独立,使得数据的可复用性和功能的可扩展性都非常好。下一步拟从用户可用性和机构知识库统计数据的共享方面进行扩展,向用户提供更为完善的访问统计服务。

参考文献
[1] 赵继海. 机构知识库: 数字图书馆发展的新领域[J]. 中国图书馆学报, 2006, 32(2): 33-36, 50. [本文引用:1]
[2] Carr L, Brody T, Swan A. Repository Statistics: What do We Want to Know?[C]. In: Proceedings of the 3rd International Conference on Open Repositories, Southampton, United Kingdom. 2008. [本文引用:1]
[3] AWStats[EB/OL]. [ 2011-03-29]. AWStats[EB/OL]. [2011-03-29]. http://awstats.sourceforge.net/. [本文引用:1]
[4] Google Analytics[EB/OL]. [ 2011-04-20]. Google Analytics[EB/OL]. [2011-04-20]. http://www.google.com/analytics/. [本文引用:1]
[5] Apache Solr[EB/OL]. [ 2011-04-25]. Apache Solr[EB/OL]. [2011-04-25]. http://lucene.apache.org/solr/. [本文引用:1]
[6] 陈波. 基于开源全文检索系统Solr的OPAC分面浏览[J]. 现代图书情报技术, 2007(11): 72-75. [本文引用:1]
[7] Faceted Search[EB/OL]. [ 2011-04-22]. Faceted Search[EB/OL]. [2011-04-22]. http://en.wikipedia.org/wiki/Faceted_search/. [本文引用:1]