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