关闭

关闭

封号提示

内容

首页 使用Solr为大数据库搭建搜索引擎.pdf

使用Solr为大数据库搭建搜索引擎.pdf

使用Solr为大数据库搭建搜索引擎.pdf

上传者: D-无限暧昧-阿古斯 2012-12-25 评分1 评论0 下载133 收藏0 阅读量750 暂无简介 简介 举报

简介:本文档为《使用Solr为大数据库搭建搜索引擎pdf》,可适用于软件工程领域,主题内容包含Software软件年第卷第期国际IT传媒品牌使用Solr为大数据库搭建搜索引擎霍庆 刘培植(北京邮电大学信息与通信工程学院北京)摘 要:如今信息快符等。

Software软件年第卷第期国际IT传媒品牌使用Solr为大数据库搭建搜索引擎霍庆 刘培植(北京邮电大学信息与通信工程学院北京)摘 要:如今信息快速发展数据库信息不断增多尤其是对于中文信息传统的数据库搜索方式(like)不仅效率低下而且搜索速度极慢此时就需要为数据库搭建外部的中文搜索引擎。ApacheSolr是基于Lucene的企业搜索引擎。本文介绍了Solr的结构和特点并使用它搭建大数据量的数据库搜索引擎并在最后比较了数据库和搜索引擎的搜索时间证明了使用Solr能大大增加搜索效率。关键词:计算机软件搜索引擎Solr数据库中图分类号:TP      文献标识码:A      DOI:jissnUseSolrtoBuildaSearchEngineforLargeDatabaseHUOQing,LIUPeizhi(SchoolofInformationandCommunicationEngineering,BeiJingUniversityofPostandTelecommunications,Beijing,China)【Abstract】Withtherapiddevelopmentofinformation,thesizeofdatabaseisincreasing,especiallyforChineseinformationThetraditionaldatabasesearchmode(like)isnotonlyinefficient,butalsoslowAtthispointweneedtobuildafulltextsearchengineforthedatabaseApacheSolrisaLucenebasedenterprisesearchengineThisarticledescribesSolr'sstructureandcharacteristicsThenuseittobuildasearchengineforadatabasewithalargeamoutofdataFinally,atimecomparisonofusingfuzzyqueryandsearchengineillustratesthattheuseofSolrcangreatlyincreasethesearchefficiency【Keywords】SearchEngineSolrDatabase作者简介:霍庆()女硕士通信与信息系统通信作者:刘培植教授通信与信息系统 引 言对于企业数据或者Wed站点而言中文内容的搜索是必不可少的功能之一。一般当数据量比较小的时候各种信息内容都直接存储在数据库系统中并且使用数据库提供的检索和查询功能进行中文内容搜索。但是随着数据量的增大到百万千万乃至上亿条数据的时候使用数据库中的like"keyword"查询查询效率会急剧的下降。由于数据库索引不是为全文索引设计的因此使用like"keyword"时数据库索引是不起作用的在使用like查询时搜索过程又变成类似于一页页翻书的遍历过程了所以对于含有模糊查询的数据库服务来说LIKE对性能的危害是极大的。此外使用like查询的结果准确性也非常差例如使用like“北京现代”:就不能匹配词序颠倒的“现代xxx北京”。如果需要查询为“上市公司”,要去查找年上市的所有公司数据库查询用like就做不到而如果用搜索引擎建立了“上市”,就可以查找到。因此使用数据库直接查询来进行中文检索并不是个好的解决方案。而使用搜索引擎就可以避免数据库like查询带来的低效性。而使用Solr搭建自己的搜索引擎更可以避免使用其他大型搜索引擎的所遇到的更新慢数据不准确等问题。本文使用Solr搭建数据库的搜索引擎并对搜索结果进行对比体现了使用搜索引擎带来的查询高效率。 Solr简介 Solr概念Solr是一个基于Lucene的Java搜索引擎服务器。Solr提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XMLXSLT和JSON格式)。它易于安装和配置而且附带了一个基于HTTP的管理界面。Solr已经在众多大型的网站中使用较为成熟和稳定。Solr包装并扩展了Lucene所以Solr的基本上沿用了Lucene的相关术语。更重要的是Solr创建的索引与Lucene搜索引擎库完全兼容。通过对Solr进行适当的配置某些情况下可能需要进行编码Solr可以阅读和使用构建到其他Lucene应用程序中的索引。此外很多Lucene工具(如Nutch、Luke)也可以使用Solr创建的索引。Solr主要特性有:强大的全文检索功能高亮显示检索结果动态集群数据库接口和电子文档(WordPDF等)的处理。而且Solr具有高度的可扩展支持分布搜索和索引的复制。软件工程软件 Solr与Lucene上文提到了LuceneLucene是目前最为流行的基于Java开源全文检索工具包。Solr与Lucene并不是竞争对立关系恰恰相反Solr依存于Lucene因为Solr底层的核心技术是使用ApacheLucene来实现的简单的说Solr是Lucene的服务器化。需要注意的是Solr并不是简单的对Lucene进行封装它所提供的大部分功能都区别于Lucene。Solr和Lucene的本质区别有以下三点:搜索服务器企业级和管理。Lucene本质上是搜索库不是独立的应用程序而Solr是。Lucene专注于搜索底层的建设而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理而Solr负责。所以说一句话概括Solr:Solr是Lucene面向企业搜索应用的扩展。 搜索引擎构建 开发环境操作系统:Windows数据库:OracleSolr版本:apachesolr分词器:mmsegj词库:sogoudic运行容器:Tomcat 系统结构图系统架构FigSystemArchitecture图显示的是搜索引擎的系统架构图。最底层为Oracle数据库为测试大数据量的中文查询情况数据库中存储万条记录。中间为Solr搜索引擎核心由于Solr是通过Servlet方式实现的因此需要部署在容器上本文选择最流行的搭建中小规模Web应用的Tomcat。由图中可知Solr主要需要配置的为分词器、词库以及对应索引数据的配置文件这些在下文会详细的进行说明。经过这些配置使用DataImportHandler组件可以通过HTTP控制生成需要的索引文件。最上层为应用层在这层中可以灵活的使用搜索引擎的查询结果构建自己的搜索应用本文不对查询结果进行处理仅通过XML列出。此外Solr提供了SolrJ的API用于索引进行管理包括查询以及添加、删除索引这部分在下文也会详细提到。 数据模型 数据库模型本数据库为一个用户登记表其中用户名为中文字段。表结构如下:表数据库表结构TabDatabaseTableStructure列名数据类型长度USERCODEVARCHARUSERNAMEVARCHARCOMCODEVARCHARVALIDSTATUSVARCHARCHANGEDATEDATE其中USERCODE为用户编号USERNAME存放用户名COMCODE存放公司代码VALIDSTATUS存放目前状态CHANGEDATE存放最后修改时间。数据表中共存放万条数据。对于USERNAME由于是本文主要查询对象为了符合中文语义以及为了使查询更有意义创建时使用姓名名的方式。其中姓采用“中国姓氏大全”名和名从GB汉字库中随机抽取组合而成。抽取名字部分关键代码如下先初始化lastNameMap再随机抽取:privatestaticStringrandomLastName(){ intkey=(int)(Mathrandom()lastNameMapsize()) Stringn=lastNameMapget(key) key=(int)(Mathrandom()lastNameMapsize()) Stringn=lastNameMapget(key) returnnn}publicstaticvoidinitLastNameMap()throwsUnsupportedEncodingException{ intindex= Stringstr="" bytegbkBytes= for(intsegIndex=xbsegIndex<=xfsegIndex){  for(intcharIndex=xacharIndex<=xfecharIndex){   gbkBytes=newbyte{(byte)(segIndex),(byte)charIndex}   str=newString(gbkBytes,"GBK")霍庆等:使用Solr为大数据库搭建搜索引擎软件   lastNameMapput(index,str)   Systemoutprintln(str)  } }}对于VALIDSTATUS一般进行删除操作的时候为了数据安全并不直接将数据从数据库中删除而是使用VALIDSTATUS标识进行逻辑删除标识为时代表数据有效为是代表逻辑删除。CHANGEDATE为了索引在增量添加的时候查找需要添加的增量部分而设定。 索引模型对于索引建立对应数据库选定需要的内容关键代码如下:<fields><fieldname="USERCODE"type="string"indexed="true"stored="true"><fieldname="USERNAME"type="textMaxWord"indexed="true"stored="true"><fieldname="COMCODE"type="text"indexed="true"stored="true"><fieldname="VALIDSTATUS"type="text"indexed="true"stored="true"><fieldname="CHANGEDATE"type="date"indexed="true"stored="true"><fields><uniqueKey>USERCODE<uniqueKey><defaultSearchField>USERNAME<defaultSearchField><solrQueryParserdefaultOperator="OR">其中indexed="true"代表对这一栏建立索引stored="true"代表存储这部分数据待查询后可直接查看这部分数据。defaultSearchField为默认搜索的域。solrQueryParserdefaultOperator代表当采用多个查询参数时使用OR来进行连接例如查询“王一”系统中会按照“王OR一”来进行查找。 分词和词库分词器的选取不仅影响到整个引擎的效率还对检索结果的准确度有决定性的作用。目前比较流行的分词器主要有paodingimdictmmsegjik。paoding:Lucene中文分词“庖丁解牛”PaodingAnalysisimdict:imdict智能词典所采用的智能中文分词程序mmsegj:用ChihHaoTsai的MMSeg算法实现的中文分词器ik:采用了特有的“正向迭代最细粒度切分算法“多子处理器分析模式。经过从开发者及开发活跃度用户自定义词库速度算法和代码复杂度帮助文档等方面综合考虑决定使用Mmsegj分词器。MMSeg算法有两种分词方法:Simple和Complex都是基于正向最大匹配。Complex加了四个规则过虑。官方说:词语的正确识别率达到了。mmsegj已经实现了这两种分词算法版在complex基础上实现了最多分词(maxword)。 索引管理 数据库导入配置执行数据库导入DataImportHandler需要对Solr进行一些数据库相关配置。关键配置如下:<dataSourcetype="JdbcDataSource"name="ds"driver="oraclejdbcdriverOracleDriver"url="jdbc:oracle:thin:::orcl"user="archplatform"password="archplatform">这部分是配置数据库关联数据配置了数据库名访问用户名密码等关键信息。<entityname="PRPDUSER"dataSource="ds"PK="USERCODE"processor="SqlEntityProcessor"deltaQuery="selectUSERCODEfromPRPDUSERwheretochar(CHANGEDATE,'yyyymmddhh:mi:ss')>'${dataimporterlastindextime}'"query="selectfromPRPDUSER"deltaImportQuery="selectfromPRPDUSERwhereUSERCODE='${dataimporterdeltaUSERCODE}'"deletedPkQuery="SELECTfromPRPDUSERwhereVALIDSTATUS=''">这部分为执行导入时非常重要的部分。deltaQuery和deltaImportQuery为执行增量导入时的数据库查询语句选择CHANGEDATE的时间大于上次执行导入的时间的条目实现部分增量导入节省了全部导入重复内容浪费的时间。Query未执行完全导入时执行的数据库查询语句。 查询添加删除索引Solr提供了一个易于使用的、基于Java的API它避免了HTTP链接和XML命令的所有弊端。这个称为SolrJ的新客户机使得通过Java代码处理Solr更加轻松。SolrJAPI通过良好定义的方法调用简化了索引创建、搜索、排序和分类。本文中使用SolrJ来进行索引的添加删除以及执行中文搜索。查询关键代码如下:CommonsHttpSolrServersolrServer=newCommonsHttpSolrServer(SOLRURL)SolrQueryquery=newSolrQuery()querysetQuery(":")QueryResponsersp=solrServerquery(query)SolrDocumentListdocs=rspgetResults()for(Objectobj:docs){ SolrDocumentdoc=(SolrDocument)obj StringUSERNAME=(String)doc霍庆等:使用Solr为大数据库搭建搜索引擎软件getFieldValue("USERNAME") StringUSERCODE=(String)docgetFieldValue("USERCODE")}通过SolrJ查询只需先建立连接CommonsHttpSolrServer然后定义SolrQuery添加查询语句setQuery()然后就可以通过QueryResponse类型的对象读出查询结果。添加单独索引时在建立连接的基础上创建SolrInputDocument类型通过addField()方法添加相应的索引域和内容最后执行add()方法以及commit()方法即可。删除单独索引时在建立连接的基础上执行deleteByQuery()方法再commit()就可以完成根据查询结果删除索引。 结果分析 Solr开销Solr导入千万级数据花费分秒。索引文件占用空间M。图导入结果FigImportResults 搜索时间对比查询抽取JAVA中文字库GB中的字使用单字查询。Solr采用SolrJ接口读取查询时间rspgetQTime()数据库采用模糊查询like。经次统计测试Solr平均查询时间:MS数据库平均查询时间:MS。可以看出使用搜索引擎查询的时间是数据库查询的千分之一量级。 结 论在进行海量数据搜索的时候如果仅仅使用数据库的技术那将带来非常大的痛苦速度会是最大的瓶颈此外还会带来搜索结果不匹配等令人沮丧的问题。本文提出了使用Solr建立数据库搜索引擎并结合具体代码简单说明如何构建Solr搜索引擎并在最后进行了比较Solr的搜索引擎优势是显而易见的。参考文献 车东Lucene:基于Java的全文检索引擎简介OLhttp:wwwchedongcomtechlucenehtml px企业级搜索引擎Solr使用指南OLhttp:pxiteyecomblog netoearthApacheSolr介绍OLhttp:blognetoearthcomhtmlapachesolr介绍htm 石青SEO基于Lucene的最流行的分词法OLhttp:wwwxinxilongcomHtmlhtmldoubled=sqrt((xixi)*(xixi)(yiyi)*(yiyi))doubled=sqrt((xixi)*(xixi)(yiyi)*(yiyi))doubledd=(xixi)*(xixi)(yiyi)*(yiyi)doubleAngle=acos(dd(d*d))*pdegree=Angle} 结 论举例说明了离散曲率不能很好的表达图像像素的变化。为此本文提出一种度量图像像素陡变程度的方法(见公式)该方法是利用pi点与它的前后点pi、pi形成的两个矢量),(=iiiiyyxxd、),(iiiiyyxxd=定义d相对于d变化的角度弧度值θ为pi点的陡变度pdegree。离散曲率是一种存在有计算误区的近似运算而陡变度是一种不存在有计算误区的精确运算故陡变度比离散曲率能更好的表达图像像素变化。参考文献 祝轩,雷文娟,张申华,王蕾曲率驱动与边缘停止相结合的图像放大J计算机,,: 王学松,周明全,李鹏,解立志曲率定位的图像区域化SSDA模板匹配方法J计算机工程与应用,,: 赵恒军,牛艳霞基于曲率驱动的图像修补方法J华北水利水电学院学报,,: 苏宇,郭宝龙一种基于曲率尺度空间的图像拼接算法J计算机工程与应用,,: 李冠宇,游茂基于曲率的灰度图像拼接研究J电脑编程技巧与维护,,: 杨柳,汪天富,林江莉,李德玉基于平均曲率流活动轮廓模型的超声医学图像边缘提取J航天医学与医学工程,,: 张小洪,雷明,杨丹基于多尺度曲率乘积的鲁棒图像角点检测J中国图象图形学报,,: 王洪元,石澄贤,夏德深一种混合曲率流图像除噪方法J模式识别与人工合成,,: 石澄贤,王元全,王平安,夏德深MinMax曲率流实现图像去噪和增强分析J计算机工程与应用,,: 章毓晋图像工程(中册)图像分析M北京:清华大学出版社,年月第二版,p 刘建忠数字图像上一点的主方向的一种简易算法OL中国科技论文在线(http:wwwpapereducn) 刘建忠.图像边缘的数学结构分析J.软件():上接第页霍庆等:使用Solr为大数据库搭建搜索引擎

类似资料

编辑推荐

《华丽的目标》作者:米洛[出书版].txt

可怕的零食--(韩)安炳洙.pdf

石头剪子布:图解博弈论ABC--王春永等编著.pdf

game_theory_an_introduction.pdf

白少,宠妻如命(完结+番外).txt

职业精品

精彩专题

中秋节除了赏月,你还想怎么过?

“仰头望明月,寄情千里光”,算算你有多久没回家了。庆幸这个中秋节赶上了国庆节,不用悲伤“故乡再无春夏,只有秋冬”,独自一人赏月,8天长假,回家一趟,妥妥的!

用户评论

0/200
    暂无评论
上传我的资料

精选资料

热门资料排行换一换

  • 黎庶昌:西洋杂志+湖南人民出版社…

  • 人生之体验.pdf

  • 【投资大师谈投资】.pdf

  • Baudrillard, Jea…

  • 《纪效新书》四库本.pdf

  • 中國現代化論文集.pdf

  • 创世论与进化论的世纪之争(张增一…

  • 张光直:中國考古學論文集,三聯書…

  • 大乘般若部.pdf

  • 资料评价:

    / 4
    所需积分:1 立即下载

    意见
    反馈

    返回
    顶部