陈辰+唐兰文+张超
摘要:随着信息化的高速发展,汽车业与信息技术充分融合为一体。伴随着汽车业的快速发展,汽车数据也呈现爆炸式的增长。汽车数据的检索是汽车信息化最重要的部分,而对于汽车数据的检索来说如何在海量的汽车数据中快速、精准地查找到需要的数据,是评价其功能的重要指标,也是一个重要的研究问题。该文针对该问题,对solr搜索框架和Jcseg中文分词器进行了研究,并结合JAVA设计封装成可重用的组件,从而提高对汽车数据的检索速度。
关键词:快速搜索;Solr;Jcseg;中文分词
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)28-0012-03
当今是信息化时代,更是大数据时代,信息的增長呈现出爆炸式态势。而伴随着汽车业的高速发展,汽车业相关技术和材料也在飞快的更新换代,由此产生的汽车相关数据也越来越庞大。如此庞大的与汽车相关的数据信息的聚合汇聚,产生了海量复杂的信息。而庞大且杂乱的信息量导致获取和整理有效信息的难度和复杂度的大大增加,而垃圾信息的获取概率也随之增大。于是,人们开始思考如何精准且快速地获取有用信息,这就造成了对应的搜索技术与工具的应运而生。通用的搜索技术有数据库技术和搜索引擎技术。数据库技术在传统的信息系统中搜索性能表现良好,但是涉及大数据量的情况,表现就有点差强人意。而且使用方式比较单一。而以搜索引擎技术而生成的作为专门的信息搜索工具的搜索引擎,可以帮助用户尽可能快速且精确地从庞大的信息量中检索整理出符合条件的信息。搜索引擎的出现符合时代的潮流,因此,作为朝阳产业的搜索引擎从其诞生至今,虽然仅仅只经理了10多年的时间,却取得了异常迅速的发展。
搜索引擎在发展的过程中经历了许多具有里程碑意义的历史事件,它们一步步的奠定了搜索引擎在今天的地位。
搜索引擎的发展也是一步步由稚嫩走向成熟的:初始时,麦吉尔大学的一位学生在1990年发明了搜索引擎的雏形“Archie”,而其只是一个可以搜索的文件名列表,列表内容由FTP文件名组成,查询时用户输入精确的文件名,“Archie”会返回FTP站点,用户可以通过该站点来获得对应的文件。在1993年Martin Koster基于“Archie”发明了Archie的HTTP版本的搜索引擎ALIWEB,ALIWEB的功能类似Yahoo!,可以通过主动提交信息来建立链接索引。同年,用于分析字词关系的Excite被斯坦福大学的学生所发明,Excite能够对互联网上信息进行更有效的搜索,达到了更好的搜索的效果。而经过四年的积蓄与发展,卡耐基梅隆大学的Michael Mauldin于1997年发明了搜索引擎Lycos,Lycos提供相关度排序,前缀匹配和字符相近限制搜索,并且第一次在索引程序中接入了spider程序的方法和使用了网页自动摘要的方法。而集成搜索、多语言支持、用户界面等功能于一体的Google于1998年诞生,其为搜索引擎带来了技术革新。
值得一提的是,相较于国外,国内对搜索引擎的研究起步较晚,但是也取得了一定的成就。搜索引擎分类众多,但是基本思想却是一致的。要做的首先都是对目标信息进行搜集,然后按照各自集成的方法对搜集到的信息进行分析和处理,并按照一定的数据结构将分析后的信息数据保存下来,最后,用户从这些被保存的信息数据中检索到有用的信息。由于大型商业搜索引擎只有少数人可以接触到,开源搜索引擎应运而生。在开源搜索引擎中最流行的产品应当是来自于Lucene家族的,很多知名的搜索引擎都是该家族以Lucene库为基础派生出的。而Solr就是在Lucene基础之上实现的一个开源的搜索引擎。开发者可以通过其对应的配置文件,对Solr搜索引擎进行功能配置,从而实现强大的搜索功能,而且solr搜索引擎的查询和索引的效率都是极高的,因此, Solr搜索引擎是大多数开发者的首选。
1 技术简介
1.1 Lucene
Lucene是一个开源的全文检索工具包,同时是Apache软件基金会Jakarta下的一个子项目。不幸的是,Lucene仅仅提供了构建检索工具所需要的基础架构,而不是一个完整的搜索引擎,但是开发者可以利用Lucene的基础架构结合自己的思路快速地开发出符合自己想法的搜索引擎。Lucene于2001年被捐献给Apache,其作者Doug Cutting,而其本身就是一位在全文检索方面资深的专家。Lucene经过多年的发展和完善,逐步成为了当下最流行的开源的java全文检索工具包,现在Lucene的最新版本为6.6.0版本。值得一提的是,eclipse就使用了Lucene作为全文检索工具来检索帮助文档。
1.2 Solr
Solr全称Search On Lucene Replication,是一个开源的全文搜索服务器。它是基于Apache Lucene并对其进行了扩展,从而实现的。它不仅提供了比Lucene更为丰富的查询语言,还提供了一个完善的功能管理界面。Solr基于JAVA语言开发,是一个高性能、可配置、可扩展、独立的企业级搜索应用服务器。在Solr中,资源是以含有能唯一标识其自身的属性Document为对象进行存储的,标识其自身的属性的默认名为id,其功能在Schema配置文件中进行描述。每个文档都是由一系列的表示资源的一个属性的Field所构成。Solr对外提供的接口类似于webservice的api接口。用户可以通过发送http请求将一定格式的XML文件提交到加载Solr搜索引擎的服务器中,此时服务器会生成与其对应索引;当然,用户也可以通过Http Get操作向加载Solr搜索引擎的服务器发出查找的请求,此时服务器会返回一个以XML为格式结果。
1.3 Jcseg
jcseg是一个基于JAVA开发和流行的mmseg算法实现的中文分词器,并且其是开源的。jcseg是一款独立的分词组件,并且提供了针对solr的分词接口。Jcseg具有很强大的功能特性:由于使用mmseg算法,jcseg分词准确率高达98.41%;同时支持自定义词库,对于词库和词库中的内容开发者可以很方便地进行添加/更改和删除,除此之外,开发者还可以对词库分类;jcseg不仅支持同义词匹配还可以对分词拼音进行追加。同时jcseg整合了《现代汉语词典》和cc-cedict词典中的词条,并且根据cc-cedict词典和词条的对照jcseg还为词条标上了拼音;jcseg支持中文分数和中文数字识别,并且自动将中文数字转换为阿拉伯数字加入分词结果;jcseg支持中英文混合词的识别;有更好的英文支持,如电子邮件、网址等;支持自动半角/圆角、大小写转换;支持特殊字符(如I,II)识别,特殊数字的识别,智能中文人名识别;jcseg通过开启一个守护线程随时监测词库更新并随时加载。endprint
2 系统架构
为了管理的方便性,以及将来系统的扩展性,该设计采取的方法尽量分离了管理结构与普通应用,为了达到方便管理的目的,该设计使用方法将所有管理功能都尽可能地纳入同一个Web页面下。如下图所示,该设计有8个模块:Solr Core API、New API、索引库、查询、索引更新、索引删除、 网络蜘蛛、分词。在这8个模块中,开发者需要自己来实现除了Solr API模块以外的其他七个模块。在下图中不同模块之间调用关系用箭头表示,需要通过修改solr配置文件实现来实现的模块用虚箭头表示。
2.1 分词模块的设计与实现
在搜索引擎中分词模块的地位极其重要,因为搜索引擎最后的搜索结果很大程度上是由分词的结果决定的,而在实际需求中,中文搜索是常见的功能需求。为了让Solr搜索引擎支持检索中文,这里需要选择Jcseg中文分词器。Jcseg中文分词器和Solr的整合比较简单,开发者只需要更改Solr的配置文件即可。首先,将Jcseg的配置文件Jcsegjcseg.properties,目录lexicon\,以及\output下的jcseg-core-1.9.5.jar与jcseg-solr-1.9.5.jar拷贝到Solr工程的lib目录下,这样就做好了准备工作;接着,需要修改Solr的配置文件:solr-5.5.0\server\solr\collection1\conf,并添加如下内容:
这样,就定义了一个叫作show_text的类型,之后所有被定义为这个类型的字段(Field),在建立索引和查询的时候都会使用jcseg analyzer进行分词,包括中文。
2.2 查询模块的设计与实现
查询模块主要通过servelt技术实现。用户在查询页面表单里输入要查询的关键词,点击查询按钮向服务器发送查询请求,服务器收到请求后,获得查询参数,调用Solr对外提供的HTTP接口,获取查询的结果对象,并将查询结果放到页面返回给用户。
2.3 管理模块的设计与实现
管理模块简化了Solr的添加、更新和删除操作。主要通过servlet技术实现,用户在页面上选择要添加到索引库的文件并上传至服务器,服务器接受到请求后会把该文件保存在服务器的附件目录下,然后调用Solr对外提供的索引相关的接口,创建索引,创建完索引后,就可以在搜索页面对该资源进行搜索。更新和删除索引执行类似的操作即可。
2.4 编辑配置文件
在Solr中,主要的配置文件有3个,这三个配置文件的格式都是xml,它们分别是:schema.xml、solrconfig.xml和solr.xml。而搜索器及其相关参数使用默认值即可,因此,不需要对solrconfig做特别配置。
配置schema.xml需要string 和text这两个fieldtype。其中text指出在该类型对于搜索内容进行分词采用的是中文分词类;field有id、url、text和title四个;id对应string类型表示文档的序号、url对应string类型表示网页的链接地址、text对应text类型为网页的内容、title对应text类型为网页的标题,title和text需要分词和建立索引。Text为默认的搜索字段,建立在以上基础上使用者就可以达到搜索某个网页的文字信息的目的了。
2.5 New API模块的设计与实现
New API主要是为了简化Solr索引的操作,使用JAVA对Solr对外开放的API进行了二次封装,在Solr原有的基础之上,添加了自动生成配置文件的机制,该机制,可以在创建索引后,创建XML配置文件,并提供对外接口处理该XML配置文件,当传入该格式的配置文件后,能够重复所记录下的操作,方便索引的迁移;修改了默认创建的索引格式,免去了大量的冗余,方便进行索引文虎,同时,将想要被索引到的内容统一放到一个字段内,统一管理该字段的分册方式,方便进行全文搜索;封装了同一个目录下所有索引文件的增量更新,通过校验文件的最后一次修改时间来判断是否需要更新索引,这样就节省了大量不必要的工作,节省了大量的时间,从而加快了更新的速度。与此同时,在用户请求检索数据的同时,检查数据是否发生了修改或者删除操作,以此来动态地维护索引,始终保持现有索引和检索数据的一致性;使用了智能分词器,并且制作了包含大量词条的同义词词库,对汽车专业的词汇更加准确,并且实现了中英文、汉语和拼音的映射。
3 结论
Solr用于解决大数据量情况下搜索速度慢的问题,同时,为了支持中文检索功能,可以使用Jcseg分词器,通过修改Solr的配置文件,开发者可以方便地将Jcseg中文分词器和Solr结合起来。本设计简化了Solr自带的管理器创建索引的方式,同时实现了自动生成配置文件的机制,在创建索引之后,可以创建XML格式的配置文件,同时提供了读取配置文件的接口;通过Solrj实现了同一目录下所有索引文件的批量更新,通过判定文件的最后修改时间来决定是否更新索引,从而节省了大量不必要的工作;制作了包含大量词条的同义词词库,因此对汽车专业词汇的分词更加准确,并且实现了中英文、汉字拼音之间的相互关联。但是由于时间、精力、知识水平的制约,本设计也有需要提高的地方,比如未对搜索引擎的性能做改进等。
参考文献:
[1] 李晓明,闫宏飞,王继民.搜索引擎原理、技术与系统[M].北京:科学出版社,2005.
[2] Lucene官方网站.https://lucene.apache.org/
[3] solr官方网站.http://lucene.apache.org/solr/
[4] jcseg官方网站.https://sourceforge.net/projects/jcseg/
[5] SolrWiki.http://wiki.apache.org/solr/
[6] STL China 搜索引擎技术中心.http://www.stlchina.org/twiki/bin/view.pl/Main/SearchEngine
[7] 谢新洲.网络信息检索技术与案例[M].北京:北京图书馆出版社,2005.
[8] 喻平,谭鸣,夏小云.基于Lucene技术的垂直搜索引擎的研究[J].软件导刊,2008.
[9] 中国互联网络信息中心 http://www.cnnic.net.cn
[10] 汪文勇.基于Lucene的Web站内信息搜索系统[D].电子科技大学,2005.
[11] Heritrix官方网站 http://crawler.archive.org/
[12] 苗奪谦,卫志华.中文文本信息处理的原理与应用[M].北京:清华大学出版社,2007.
[13] 葛微,罗圣美,周文辉.HiBase:一种基于分层式索引的高效HBase 查询技术与系统[J].计算机学报,2015,38(35):1-15.endprint