用开源软件建垂直搜索引擎 转载 http://news.cnblogs.com/n/60041/
用Solr、Nutch等开源软件来构建电子元器件垂直搜索引擎涉及很多实现细节,本文结合实际应用系统对数据采集、中文搜索、结果输出、分页处理、整合数据库等重点问题提出了切实可行的解决方法。
用开源软件建垂直搜索引擎
■ 董娅 周峻松
针对搜索引擎的各种开源技术是开源社区的一枝奇葩,它大大缩短了构建搜索应用的周期,并使得根据特定需求打造个性化应用的垂直搜索引擎系统成为可能。作为一个独立的企业搜索应用解决方案,Solr在美国的众多知名网站中得到应用,如美国最大的科技资讯类网站CNet。Solr基于高性能的Lucene开发,它不仅实现了比Lucene更为丰富的查询语言和更为优异的查询性能,而且实现了可配置、可扩展,对外提供类似于Web服务的API接口。用户可通过Http请求向搜索引擎服务器提交指定格式的XML文件生成索引,也可以通过“HttpGet”操作提出查询请求,并得到XML格式的返回结果。Solr结合其他开源搜索软件成为构建行业垂直搜索引擎的优选方案。
垂直搜索引擎的总体结构
本文所述的电子元器件垂直搜索引擎以Solr 1.4为核心框架,综合应用Nutch、IKAnalyzer等开源软件,充分利用它们灵活的配置、丰富的功能以及高效的性能,力求用最简单的代码,快速实现海量电子元器件信息的采集、文本搜索、参数检索,满足技术研究人员与市场采购人员对于行业领域知识的专、精、深要求。
电子元器件垂直搜索引擎系统包括数据采集、数据加工、数据规划和管理、搜索服务四个主要部分。数据采集部分负责对Internet、Intranet、内部电子文档、结构化数据(关系数据库、XML)等进行抓取、滤重、分类、摘要;数据加工部分负责对采集来的数据进行筛选、编辑和审校;数据规划和管理部分负责系统元数据的定义与管理,包括分类体系、特性参数、参数类型、计量单位等;搜索服务则为用户提供分类导航、数据检索、行业报告及其他个性定制服务(系统的总体结构如附图所示)。本文结合选取其中的数据采集(Web页面抓取、结构化数据采集、中文支持)、搜索结果呈现(层面浏览、高亮显示、分页处理)等几个重点实现方法进行介绍。
数据采集
1. Web页面抓取
采集互联网Web页面的数据并非Solr所长,我们可以借助在这方面有着突出表现的Nutch。Nutch基于Hadoop分布式系统,既可以在单台机器上运行,也可以在多台机器构成的集群上运行。Nutch可以根据用户需要配置优先抓取某些页面,而且抓取质量很高。
本系统我们利用Solr作为处理搜索结果的源和入口,而让Nutch负责它最擅长的工作:抓取和提取内容。Nutch的配置文件是nutch-site.xml,配置的内容包括指定蜘蛛的名称、激活插件、限制单机一次运行抓取的最大URL数、指定抓取规则等。完成这些基本配置以后就可以进行抓取分析操作。
2. 结构化数据采集
为了充分利用现有资源,提高数据检索效率,我们把收录了100多万条电子元器件产品、1000多万条特性参数信息的中国电子元器件产品数据库和中国电子厂商数据库、韩国电子元器件信息库作为结构化数据源,向Solr一次全部导入数据,后续维护的部分使用增量导入。用于搜索的表主要涉及产品基本信息表、厂商基本信息表、分类表、特性参数表、参数模板表、模板信息表、产品特性参数值表、计量单位表等。
Solr通过可配置的方式将数据库中多列、多表的数据生成Solr文档。配置的方法是在域结点内定义具体的字段(类似数据库中的字段),然后通过配置文件导入所有数据,发现并处理由插入、更新带来的变化。
3. 中文搜索支持
Solr的分析包并没有直接提供中文搜索支持。这里选用轻量级的中文分词工具包IK Analyzer来配合工作。IKAnalyzer基于Java开源,如今新版本的IKAnalyzer 3.2.0已发展为面向Java 的公用分词组件,独立于Lucene项目,同时提供了对Solr的专用接口。
电子元器件搜索引擎系统利用的IK Analyzer特性包括: 特有的“正向迭代最细粒度切分算法”具有60 万字/秒的高速处理能力;多词元处理器分析模式,支持英文字母(IP地址、Email、URL)、数字(日期、常用中文数量词、罗马数字、科学计数法),中文词汇(姓名、地名处理)等分词处理;优化的词典存储更小占内存用; 针对Lucene 全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,可极大地提高检索的命中率。
由于电子元器件垂直搜索应用面向特定的专业领域,IKAnalyzer本身虽然已经提供很丰富的常用词汇,但对于专业性强的应用仍然显得捉衿见肘。好在IKAnalyzer提供了良好的扩展能力,我们利用配置文件轻易实现了用户词典的扩展与定制,这样就可以搜索到如“精密薄膜柱状无引线电阻器”、“半波随机型固体继电器”这些专业词汇了。
搜索结果呈现
Solr的搜索结果通常以XML格式返回,这对于普通用户而言不合适,不过Solr提供了多种途径(如正则表达式和文本解析)将搜索返回的结果信息进行重新布局,以产生用户易于理解的可视页面,但都需要大量的编码工作。在系统中我们利用XSLT把XML格式的结果文件转换成HTML文件。经过转换后,就可以得到能看到搜索结果的页面了。
Solr提供了层面浏览(facet)功能,它类似于一种分类筛选。运行层面无需在Solr中进行配置,但可能需要按照新的方式对应用程序内容进行索引。在已索引的字段中完成分层,层面对未进行断词的非小写词最为有效。Facet字段通常不需要存储,因为分层面的总体思想就是将可读的值显示给用户。要注意的是, Solr没有在层面中创建类别,必须由应用程序自身在索引期间进行添加,正如在索引应用程序时给文档指派关键字一样。如果存在层面字段,Solr就提供了查明这些层面及其计数的逻辑。
另外,为了在搜索结果中取得最匹配的一段文本并突出显示出来,有必要对搜索结果进行高亮显示。高亮显示可修改配置文件实现。该配置中包括了高亮文本时使用的前缀和后缀(通常在此指定突出显示文本的字体、字号、颜色或其他风格)。
如果搜索结果较多还需要分页,但我们不希望自行编写复杂的代码实现分页。我们在系统中使用了一个开源的分页插件,专门为Solr量身定制,由它对 Solr 的搜索结果进行分页处理。
实际上,Solr的功能远不止以上这些,还有很多通过简单配置和少量修改即可实现的搜索功能有待研究开发。目前,我们围绕以Solr为主体的探索以及各项功能的实现仍在继续,力求在保证系统功能与性能的前提下,充分利用开源软件的优势,降低开发成本。
(作者单位:董娅为电子工业出版社、周峻松为工业和信息化部电子科学技术情报研究所)
图注:电子元器件垂直搜索引擎系统结构图
用开源软件建垂直搜索引擎 转载 http://news.cnblogs.com/n/60041/的更多相关文章
- tl;drLegal ——开源软件license的搜索引擎
TLDRLegal - Open Source Licenses Explained in Plain English可以很方便查询各个开源license的总结(能做什么,不能做什么),还能比较不同的 ...
- 2016国产开源软件TOP100(Q1)
随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着 ...
- 2016国产开源软件Top100(Q1)
2016国产开源软件Top100(Q1) 随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向 ...
- 【转】44款Java 网络爬虫开源软件
原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time 极简网络爬虫组件 WebFetch WebFetch 是无依赖极简网页 ...
- GIS开源软件大全
3 - F 3map:行星地球项目由3map驱动,这是一个自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球. Amein!:其界面介于ArcMap和UMN M ...
- NASA的CTO——开源软件使我们诚实
Chris C.Kemp,谷歌设置新职位CTO让他领导 原文: NASA's CTO: Open source software keeps us honest 作者: Shawn Freeman 译 ...
- spring boot 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
- 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
- 2014 年最热门的国人开发开源软件TOP 100
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外认可.中国是开 ...
随机推荐
- <验证码的产生>C语言---验证码的产生和验证
无论在网页还是软件上登录时候都会遇到验证码的问题,不知道不懂其中奥秘的码友有没有兴趣一起来探讨一下. 其实并没有什么奥秘可言,就是产生随机数,然后让产生的随机数做为字符库(提前做好的数字字母字符串)的 ...
- C#代码篇:代码产生一个csv文件调用有两个核心的坑
忙活了半天终于可以开工了,a物品到底要不要放进去取决于两个因素,第一是a有4kg重,只有背包大于等于4kg的时候才能装进去(也就是说当i=1,k<4时f[i,k]=0):第二是当背包的重量大于等 ...
- 负载均衡lvs_dr_tcp_http单调度
准备三台虚拟,均为CentOS6.5 x86_64注意,配置过程中,保持端口的一致性.director (eth0 192.168.1.189, vip eth0:0: 192.168.1.18) D ...
- JavaFX基础学习之URLConnection
一个标准的JavaFX文件包含三个部分:主类 . 控制类. 界面设计(XML+CSS) 1,main.java package application; import javafx.applicati ...
- linux 目录及文件的命名规则、ls操作
linux 命名: 1 不超过255个字符 2 严格区分大小写 3 除/外,其他的字符都是合法的 注意:1)避免文件名首字符使用+ - .(避免和隐藏文件混淆) 2)避免文件名使用空格,制表符以及@# ...
- C 语言学习准备
摘要:用 C#语言学习了一些数据结构,突然想学习 C 语言,为了学习C,本文准备好资料. C 语言学习准备 作者:乌龙哈里 时间:2015-11-17 平台:Window7 64bit,Visual ...
- JQuery常用API 核心 效果 JQueryHTML 遍历 Event事件
JQuery 常用API 参考资料:JQuery 官网 jQuery API 中文文档 核心 jQuery 对象 jQuery() 返回匹配的元素集合,无论是通过在DOM的基础上传递的参数还是创建 ...
- 树:BST、AVL、红黑树、B树、B+树
我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操 ...
- 关于reportng生成的测试报告不按测试执行顺序的解决办法
需要修改TestResultComparator类的源码,源码自己去reportng官网http://reportng.uncommons.org/下载,因为reportng默认是按字母先后顺序进行排 ...
- Ubuntu 软件 安装 下载 及更新
1 软件安装 sudo apt-get install 2 软件搜索 sudo apt-cache search 3 系统已经安装了什么软件 dpkg -l 是否确切安装了某软件 dpkg ...