利用搜索引擎搭建企业搜索平台
搜索引擎是当前互联网应用中的主要工具,通过使用搜索引擎,使得我们检索信息的能力获得了极大的提高。如何将搜索引擎技术引入到企业中应用,本文从搜索引擎的工作原理出发,利用基于Lucene的搜索引擎服务器Solr搭建企业自己的搜索平台。
标签:企业 信息化 搜索引擎 信息检索 lucene solr
一、前言
1.目的和意义
搜索引擎是当前互联网应用中的主要工具,通过使用搜索引擎,使得我们检索信息的能力获得了极大的提高,我们较常使用的百度和Google就是搜索引擎应用最成功典范。随着企业数据中心的建立,越来越多的数据不断的汇聚,企业将面对海量数据,如何把搜索引擎技术引入到企业中应用,并利用其为企业搭建自己的搜索平台,为企业从海量数据中进行快速、准确、有效的搜索提供支持。
2.研究的内容
本文主要研究内容是Lucene搜索引擎实现原理,并利用基于Lucene的搜索引擎服务器Solr搭建企业自己的搜索平台。
二、搜索引擎原理
1.搜索引擎介绍
搜索引擎是一种搜索工具,目的在于帮助用户到想要查询的信息和数据。搜索引擎没有具体的分类,大致分为全文搜索引擎、分类目录搜索引擎、元搜索引擎等。企业中要使用搜索引擎技术,可以选择成熟的开源项目,目前开源的全文搜索引擎有Sphinx、Nutch、Solr等等。
2.搜索引擎工作原理
不同的搜索引擎实现会有一些差异,但是基本的实现原理是类似的。搜索引擎工作原理总体分两个过程,索引(Indexing) 和搜索(Search)。
索引:是所有搜索引擎的核心概念,为了进行快速查,把数据处理成一种高效、可交叉引
用的格式。索引过程是将各种数据提取成搜索引擎能识别的信息交给索引器,索引器会分析数据并在索引库中创建该信息的索引。
搜索:就是在索引中查关键字的过程,目的是到这些关键字在哪些地方出现过,搜索的质量通常由查确率(precise)和查全率(recall)来衡量,查全率衡量查到相关内容的能力,查确率用来衡量过滤非相关内容能力。搜索过程是在得到用户的查询请求后,在索引库中搜索创建的索引,然后返回结果。
三、搜索引擎库Lucene
nutch搜索引擎本文选择Lucene搜索引擎来实现搜索应用,它是一个基于JAVA的开源、高度可扩展的搜索引擎库,也是目前最为流行的基于JAVA开源全文检索工具包。它提供了一套简单的核心API,可方便的嵌入到各种应用程序中实现增加索引和搜索功能。
1.索引的建立
只要数据能转换成文本,Lucene可以对任何格式的数据做索引和搜索。对于常见的格式化文档,使用Tika工具包解析成文本,然后将文本填到Document中的Field里(类似于数据库的
字段概念),经过分词器解析,用IndexWriter写入到索引文件中。
中文分词
在搜索引擎中,词(Token)是真正用来索引文档的信息。对英文而言,词与词之间有空格分隔,可以很容易的区分出词,而中文的词不存在分隔符,同时也缺乏明显的形态标记,难以识别。因此,中文的搜索引擎首要问题就是如何将中文分割成合理的词语序列,这个过程就叫中文分词。好的分词器能快速而准确的切分中文语句,使用户在搜索过程中从索引库中查信息花费时间减少,从而提高中文搜索速度。我们可以使用开源、成熟的分词器,如IKAnalyer、MmsegAnalyer等。
2.搜索
Lucene搜索仅需要几个类就可以简单的实现搜索,它使用Query搜索Analyer分词分析后的关键词,通过IndexSearcher搜索索引文件,返回TopDocs结果。返回的结果中包括了TotalHits结果总数和每条结果记录的Score评分等信息。
四、搜索平台的搭建
1.Solr介绍
Solr是一个基于Lucene的Java搜索引擎服务器,它包装扩展了 Lucene,使用Lucene库实现的一个HTTP服务,并沿用了Lucene的技术术语, Solr创建的索引文件能与Lucene搜索引擎库完全兼容。应用程序使用HTTP协议或Solr提供的API进行提交索引和检索,只要能和Solr服务器进行通信,就能非常简单快捷的在应用程序中实现全文检索功能。图4.1展示Solr整体的运行结构。
图4.1 Solr整体运行结构
2.Solr搜索平台的搭建
Solr的运行需要依赖于JAVA Web服务器,它可以部署在Tomcat、JBoss、Jetty等Web服务器上。下面是Solr与Tomcat整合的步骤。
2.1建立文件夹
建立Solr主文件夹,建立home和server目录,同时在home文件夹下建立data文件夹用于放置索引文件。将下载的Solr程序里的solr.war内容解压到server下,用于Solr的服务:
2.2添加Solr运行环境到Tomcat:
修改l
在节点下添加Solr运行环境:
2.3更改Solr配置文件:
更改索引文件夹配置:
${solr.data.dir:c:\solr\home\data}
完成后,运行Tomcat,输入地址:http://localhost:8080/solr,就可以进入Solr管理页面,基于Solr的基础搜索平台就已经搭建起来
3.Solr应用
3.1自定义字段
要使Solr可以处理我们自己的索引,要做的就是在Schema中配置自己的字段(Solr的字段与
数据库字段概念类似)。Schema是Solr业务逻辑的核心,一个文档包含哪些字段,字段是否被索引,如何索引,如何被查询都在Schema中定义。在Solr的conf目录下的l文件中定义自己的字段类型和字段信息,配置文件里也定义了初始的一些字段类型和字段,如整型、浮点、字符串等。下面是自定义字段信息(indexed表示是否索引,stored表示是否存储在索引文件中):
3.2 HTTP请求接口
Solr对外提供HTTP接口参数来实现对数据的索引的增加、删除、修改、查询。用户通过向部署在Web服务器中的 Solr应用程序发送 HTTP 请求来执行索引和搜索。Solr 接受请求后通过 HTTP 以同样的方式返回响应,默认配置返回 Solr 的标准 XML 响应,也可以配置 Solr 让其返回JSON等其它响应格式。参数跟在HTTP链接后面,可以在网页表单中使用。如q(查询)参数用法:
http://localhost:8080/solr/select/?q=id:00001
3.3 SolrJ
SolrJ是Solr提供的基于JAVA的接口,提供了完整的操作Solr的API。它规避了使用HTTP接口参数中拼接字符串链接的繁琐,可以和使用Lucene一样直接、灵活的嵌入在JAVA程序中操作Solr。
4.Solr性能测试
为了测试Solr的搜索性能,本文将Solr的搜索与SQL中的常用的like查询语句做性能比较。
测试环境:Solr服务器部署在CentOS6.3 Linux系统的虚拟机中,系统无其他应用。SQL服务器使用装在Windows Server 2008系统下的MSSQL Server 2008。
测试内容:针对1 个有1,324,844条记录的表做查询测试,Solr通过DataImportHandler (DIH)方法将数据导入到索引库中(100万条数据导入时间是54. 496秒)。
测试:为了保证搜索结果的准确,没有使用客户端。Solr使用Solr服务器自带的管理界面进行查询,SQL中使用SQL Server 2008自带的企业管理器进行查询。
Solr测试方法:    在Solr管理界面里填入“关键字”查询,返回结果中QTime表示查询时间,单
位为毫秒。    SQL测试方法:在企业管理器的查询界面输入like关键字语句查询,返回查询语句执行的时间。
根据上述方法,连续随机了20个关键字进行查询,形成如下对比图。
从上图可以看出,虽然仅有100万条的数据,排除各种客观因素,Solr查询的时间也仅是数据库查询的百分之一量级。我们知道Like查询语句不能利用数据库建立的索引,搜索过程实际上仍然是从头到尾的遍历过程,随着数据量不断的增大,到千万乃至上亿条数据的时候,使用LIKE查询语句,查询性能将会急剧的下降,这时候与搜索引擎的性能对比将不是百分之一的量级了。
五、结论
通过以上对搜索引擎原理的了解和搜索平台的应用,作为搜索工具,在进行海量数据搜索时,如果仅仅使用数据库技术搜索,并不能满足需求,根据搜索引擎特性,我们可以在企业中把搜索引擎技术应用到企业网站的全文检索、企业知识的全文检索、为数据库添加搜索引擎技术支持等等方面。因此,在规划好海量数据的分类,从数据源头上梳理好索引条目,充分利用搜索引擎的优势在企业中搭建搜索平台是非常实用和必要的。
参考文献
[1] 《Lucene in Action》
[2] 《Apache Solr 3.1 Cookbook》
[3] http:///solr/