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