快速业务通道

使用Java开源工具建立一个灵活的搜索引擎 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
索模块则利用这些从多个索引模块收集到的数据完成用户的搜索请求。

图 1 展现了整体的框架。可以看到,两个模块之间相对是独立的,它们之间的关联不是通过代码,而是通过索引和元数据。在下文中,我们将会详细介绍如何基于开源工具设计和实现这两个模块。

图 1. 系统架构图

使用Java开源工具建立一个灵活的搜索引擎 - 编程入门网

使用Java开源工具建立一个灵活的搜索引擎(2)

时间:2011-01-26 IBM 仇寅

建立索引

可以进行索引的对象有很多,如文件、网页、RSS Feed 等。在我们的框架中,我们定义可以进行索引的一类对象为资源。从实现细节上来说,从一个资源中可以提取出多个 Document 对象。文件系统资源和数据库结果集资源都是资源的代表性例子。

前面提到,从资源中收集到的索引被统一传送到同一个地方,以被搜索模块所用。显然除了索引之外,搜索模块需要对资源有更多的了解,如资源的名称、搜索该资源后搜索结果的呈现格式等。这些额外的附加信息称为资源的元数据。元数据和索引数据一同被收集起来,放置到某个特定的位置。

简要地介绍过资源的概念之后,我们首先为其定义一个 Resource 接口。这个接口的声明如下。

清单 1. Resource 接口

public interface Resource { // RequestProcessor 对象被动地从资源中提取 Document,并返回提取的数量 public int extractDocuments(ResourceProcessor processor); // 添加的 DocumentListener 将在每一个 Document 对象被提取出时被调用 public void addDocumentListener(DocumentListener l); // 返回资源的元数据 public ResourceMetaData getMetaData(); }

其中元数据包含的字段见下表。在下文中,我们还会对元数据的用途做更多的介绍。

表 1. 资源元数据包含的字段

属性 类型 含义
resourceName String 资源的唯一名称
resourceDescription String 资源的介绍性文字
hitTextPattern String 当文档被搜索到时,这个 pattern 规定了结果显示的格式
searchableFields String[] 可以被搜索的字段名称

而 DocumentListener 的代码如下。

清单 2. DocumentListener 接口

public interface DocumentListener extends EventListener { public void documentExtracted(Document doc); }

为了让索引模块能够知道所有需要被索引的资源,我们在这里使用 Spring 风格的 XML 文件配置索引模块中的所有组件,尤其是所有资源。您可以在 下载部分 查看一个示例配置文件。

使用Java开源工具建立一个灵活的搜索引擎(3)

时间:2011-01-26 IBM 仇寅

为什么选择使用 Spring 风格的配置文件?

这主要有两个好处:

仅依赖于 Spring Core 和 Spring Beans 便免去了定义配置机制和解析配置文件的负担;

Spring 的 IoC 机制降低了框架的耦合性,并使扩展框架变得简单;

基于以上内容,我们可以大致描述出索引模块工作的过程:

首先在 XML 配置的 bean 中找出所有 Resource 对象;

对每一个调用其 extractDocuments() 方法,这一步除了完成对资源的索引外,还会在每次提取出一个 Document 对象之后,通知注册在该资源上的所有 DocumentListener;

接着处理资源的元数据(getMetaData() 的返回值);

将缓存里的数据写入到本地磁盘或者传送给远程服务器;

在这个过程中,有两个地方值得注意。

第一,对资源可以注册 DocumentListener 使得我们可以在运行时刻对索引过程有更为动态的控制。举一个简单例子,对某个文章发布站点的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号