摘 要: 随着办公无纸化的发展,无线电管理工作者在日常工作积累了各种各样大量的电子文档,如何能够在这些电子文档中,快速、准确地查找出自己想要的文档已经成为了目前亟待解决问题。首先介绍了Luence搜索框架;其次详细解释了全文搜索引擎solr的配置和使用方法;最后,实现采用solr作为全文搜索引擎来进行文档的准确检索。
关键词 : 全文搜索,solr,
Abstract: With the development of paperless office,radio managers have accumulated a large number of electronic documents in their daily work.How to find the documents they want quickly and accurately in these electronic documents has become a problem that needs to be solved urgently.This article first introduces the Luence search framework;secondly,it explains in detail the configuration and usage of the full-text search engine solr;and finally,realizes the use of solr as the full-text search engine for accurate document retrieval.
Keyword: the full-text search; solr;
1、 Luence全文搜索框架
Lucene是一个开放源代码的全文检索工具包但不是一个完整搜索引擎,仅提供了构建搜索引擎的基础架构,我们可以通过Lucene官网站下载该工具包,然后利用这个基础架构快速地开发出搜索引擎。Lucene的原作者是Doug Cutting,一位资深的全文检索专家,最初将Lucene发表在自己的个人主页上,2001年将Lucene捐献给Apache,使得Lucene成为Jakarta的一个子项目[1]。
Luence的出现使得全文搜索得到了极大的发展,开发者不仅可以根据Luence的API开发搭建独立的搜索引擎,而且还能够将它集成到各种系统软件以及商业软件中,着名的商业软件Eclipse的帮助文档的搜索就是采用了Luence的API。
Luence作为全文搜索引擎,具有以下优势[2]:
⊙ Luence的索引文件是以8位字节为基础的,使得可以兼容各种不同的平台。
⊙ 在传统的全文检索引擎倒排索引的基础上,实现了分块索引,提升了索引速度。
⊙ 优秀的面向对象的系统架构,降低了开发人员的学习难度。
2、 solr概述
在上文中介绍了Lucence,开发人员可以利用API扩展到自己的系统软件中,但是这对于非专业的开发人员来说,要通过Lucence API来进行开发,难度还是很大,基于此,solr全文搜索引擎[3]应运而生,它很好地解决这个问题,使得Lucence在全文搜索领域得到进一步的发展。
从图1可以看出,solr是在Lucence java开源搜索包的基础上实现的一个独立的全文搜索引擎,可以独立运行在Servelet容器中。solr对用户和开发者提供了两种访问接口,一种是HTTP访问接口,通过solr自带的简单的Web界面进行交互,适合比较简单应用,另一种是API接口,通过这些API开发者可以根据用户需求定制搜索功能开发。
图1 solr全文搜索架构
3、 solr安装配置
3.1、 solr安装
solr配置使用过程[4]如下,建议JDK8.0,Tomcat7.0以上,solr选择4.5版本以上。
①按照要求安装JDK,配置成功环境变量;
②下载并且成功安装Tomcat;
③解压solr4.5,将solr.war文件放到容器(这里指Tomcat)的Webapps文件夹下面,重新启动容器,则会自动解压安装solr应用;
④在解压出来的s ol r文件夹下建立一个名为conf 的文件夹,并且将下载的solr的multicore文件夹拷贝到conf文件夹下;
⑤重启tomcat容器,输入/ solr 出现solr界面表示已经成功安装solr。
3.2、 solr配置
成功安装solr之后,接下来要对solr的配置文件进行详细配置,以满足系统的需求。需要对solr的三个文件进行配置,分别为solr.xml、schema.xml 和solrconf ig.xml,下面分别详细介绍这三个配置文件[5]。
solr.xml文件位于solr的conf 文件夹的主目录下,主要是配置solr多core的功能,可以使得多core 独立运行与solr服务器中,每个核都有独立的配置文件。solr.xml文件的格式如表1所示。
表1 sorl.xml格式
上面的配置表示,该服务器中有三个独立的core,分别为core0、core1和core2,并且它们的实例目录是solr.xml所在目录下的core0、core1和core2 目录。
schema.xml配置文件主要是设定文档的字段(field)以及字段查询时的处理方式(filedtype),表2和表3分别描述了filed和filedtype这两种元素。
表2 filed元素
表2表示了文档字段的设定格式,其中假设了三个字段,分别为id、name和size,
表3 fieldtype元素
表3定义了string、boolean和complex三种类型,这些类型在上面的field定义中用到了,表示字段处理的类型。class表示类型处理的类,其中analyzer设置使用哪一种分词方法。
solrconf ig.xml配置文件主要用于对solr服务器的系统参数进行配置。由于参数很多,所以不一一列举介绍,只对比较基本的进行介绍。
4 、solr访问接口介绍
4.1、 solr的HTTP查询语法介绍
表4 solr常用语法
4.2、 solr客户端solrj介绍
用户通过solrj可以实现访问solr的服务[6],下面描述实现访问的过程。
(1)创建链接solr服务器的句柄,配置相关参数。
String URL=:8080/solr/core0;
Ht tpSol rServer sol rServer=new Ht tpSol r Server(URL);
solrServer.setSoTimeout(3000);
solrServer.setConnectionTimeout(1000);
solrServer.setFollowRedirects(false);
solrServer.setMaxRetries(1);
(2)清空solr索引服务器的索引。
solrServer.deleteByQuery(“:*”);
solrServer.commit();
(3)添加索引。
sol rInputDocument doc1=new Sol rInput Document();
doc1.addField(“id”,”1”);
doc1.addField(“content”,”中国无线电事业,卫星通信系统”);
Collection docs=new ArrayList();
docs.add(doc1);
solrServer.add(docs);
solrServer.optimize();
solrServer.commit();
(4)搜索。
SolrQuery query1=new SolrQuery();
query1.setQuery(“content:中国无线电”);
QueryResponse rsp=solrServer.query(query);
(5)关闭引用句柄。
solrServer.shutdown();
上面的步骤是使用solrj的最基本的方式,如果想要获得更复杂的功能,可以对基本的API进行封装定制相应的功能。
5 、solr中文分词
solr服务器自身对于分词的处理能力不太理想,因此涉及到中文分词的应用中,都需要对solr进行额外的中文分词器的配置[7]。solr常用的分词器有:ik中文分词[8]、庖丁解牛[9]和mmseg4j[10]等。下面以ik中文分词为例,来进行配置过程的介绍。
(1)在网上下载IK Analyzer 2012FF_hf1包,并且解压。
(2)将IKAnalyzer2012FF_u1.jar包复制到tomcat /Webapps/solr/Web-INF/lib下面,并且在tomcat/Webapps/solr/Web-INF下面建立文件夹classes,再将IKAnalyzer.cfg.xml、stopword.dic 复制到classes文件夹下。
(3)修改tomcat/Webapps/solr/conf/multicore/ core0/conf/schema.xml,添加如表5配置;
表5 ik中文分词配置
(4)对需要用ik分词的字段的type修改为以上定义的name值type_ik。
(5)配置完成之后,重启tomcat,即完成了分词的配置。
6 solr全文搜索的设计实
图2 solr全文搜索系统示意图
图2是solr搜索模块的结构图,其中索引服务与input模块关联,处理文档建立索引入库的工作;配置分词指的是solr配置文件的配置和中文分词的实现;搜索服务与search模块关联,处理用户前台搜索的工作,其中索引服务和搜索服务都是在solrAPI 的基础上进行二次封装,可以统称为NEW API模块,因此,可以按照功能将solr模块分为配置文件的配置、中文分词的实现和NEW API这三个模块。下面分别介绍这三个模块的实现。
配置文件包括schema.xml、solrconfig.xml和solr.xml。其中,solrconf ig.xml和solr.xml文件的配置方法参考3.2小节。
表6 schema.xml格式
schema.xml文件的具体内容见表6。从表6中可以看出,需要两个filetype:string和text。其中,text指明该类型需要用中文分词进行分词处理;field有两个:filePath和content,类型分别为string 和text。filePath表示文档的路径,content表示文档的全文内容,全文搜索在这个字段默认进行。
中文分词的配置实现过程参考上文第5节内容。
表7 INSEART API对外接口方法表
表7是INSEART API 对外接口方法列表,其中,initailize方法是进行初始化配置,连接solr服务器,成功返回TRUE,失败返回FALSE;addIndex方法是添加建立索引,方法执行成功返回TRUE,失败返回FALSE;searchDocuments 方法是查询满足条件的文档,返回文档集合;deleteIndex方法是删除制定的索引,删除成功返回TRUE,失败返回FALSE。
7 、结束语
本文详细介绍了全文搜索引擎solr的配置以及设计实现,sorl全文搜索的最大的优势在于可以按照用户给出的关键词自动在文档库中搜索所有的文档内容,给出含有该关键词的文档,缺点是由于文档的内容比较多所以搜索的速度比较慢,会影响用户体验。下一步的工作是,研究如何能够提高sorl的搜索效率,进一步改善用户体验。
参考文献
[1]罗刚等,解密搜索引擎技术实战[M] ,北京:电子工业出版社, 2014.
[2] vSHoA3poleXX0L HryJeexeqgScaBcY8R115ppK_
[3] org/solr/
[4] Solr官方网站http : /htmlparser.sourceforge.net/
[5] /details/8132981
[6] /details/38229323
[7]李雪利于Solr的企业级搜索引擎的研究与实现[D]杭州:浙江理工大学, 2013.
[8] /2660
[9] _ 68b606350101rdil .html
[10] com/blog/353334