<b>操纵Java开源工具成立一个机动的搜索引擎</b>[Java编程]
本文“<b>操纵Java开源工具成立一个机动的搜索引擎</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
为利用程序增添搜索本领常常是一个常见的需求.本文介绍了一个框架,开辟者可以利用它以最小的付出实现搜索引擎功效,抱负情形下只需求一个配置文件.该框架基于若干开源的库和工具,如 Apache Lucene,Spring 框架,cpdetector 等.它支持多种资源.此中两个典型的例子是数据库资源和文件系统资源.Indexer 对配置的资源举行索引并传输到中央服务器,之后这些索引可以通过 API 举行搜索.Spring 气势的配置文件答应清楚机动的自定义和调整.核心 API 也供应了可扩大的接口.
引言
为利用程序增添搜索本领常常是一个常见的需求.固然已经有若干程序库供应了对搜索底子设备的支持,但是关于很多人而言,利用它们重新开始成立一个搜索引擎将是一个付出不小并且大概乏味的历程.另一方面,很多的小型利用关于搜索功效的需求和利用场景具有很大的类似性.本文试图以对大都小型利用的实用性为动身点,用 Java 语言构建一个机动的搜索引擎框架.利用这个框架,大都情形下可以以最小的付出成立起一个搜索引擎.最抱负的情形下,乃至只需求一个配置文件.特别的情形下,可以通过机动地对框架举行扩大满意需求.当然,如题所述,这都是借助开源工具的力气.
底子知识
Apache Lucene 是开辟搜索类利用程序时最常用的 Java 类库,我们的框架也将基于它.为了下文更好的描写,我们需求先理解一些有关 Lucene 和搜索的底子知识.注意,本文不关注索引的文件格局、分词技术等话题.
什么是搜索和索引
从用户的角度来看,搜索的历程是通过关键字在某种资源中探求特定的内容的历程.而从计算机的角度来看,实现这个历程可以有两种办法.一是对全部资源一一与关键字匹配,返回全部满意匹配的内容;二是好像字典一样事前成立一个对应表,把关键字与资源的内容对应起来,搜索时直接查找这个表便可.显而易见,第二个办法效率要高得多.成立这个对应表事实上就是成立逆向索引(inverted index)的历程.
Lucene 基本概念
Lucene 是 Doug Cutting 用 Java 开辟的用于全文搜索的工具库.在这里,我假定读者对其已有基本的理解,我们只对一些重要的概念扼要介绍.要深化理解可以参考 参考资源 中列出的相关文章和图书.下面这些是 Lucene 里对比重要的类.
Document:索引包含多个 Document.而每个 Document 则包含多个 Field 对象.Document 可以是从数据库表里取出的一堆数据,可以是一个文件,也可以是一个网页等.注意,它不平等于文件系统中的文件.
Field:一个 Field 有一个名称,它对应 Document的一部份数据,表示文档的内容大概文档的元数据(与下文中提到的资源元数据不是一个概念).一个 Field 对象有两个重要属性:Store ( 可以有 YES, NO, COMPACT 三种取值 ) 和 Index ( 可以有 TOKENIZED, UN_TOKENIZED, NO, NO_NORMS 四种取值 )
Query:抽象了搜索时利用的语句.
IndexSearcher:供应 Query 对象给它,它操纵已有的索引举行搜索并返回搜索后果.
Hits:一个容器,包含了指向一部份搜索后果的指针.
利用 Lucene 来举行编制索引的历程大致为:将输入的数据源统一为字符串大概文本流的情势,然后从数据源提取数据,成立符合的 Field 增添到对应数据源的 Document 对象之中.
系统概览
要成立一个通用的框架,必须对差别情形的共性举行抽象.反映到计划需求注意两点.一是要供应扩大接口;二是要尽大概降低模块之间的耦合程度.我们的框架很简单地分为两个模块:索引模块和搜索模块.索引模块在差别的机械上各行其是对资源的索引,并把索引文件(事实上,下面我们会说到,还有元数据)统一传输到同一个地方(可以是在远程服务器上,也可以是在本地).搜索模块则操纵这些从多个索引模块汇集到的数据完成用户的搜索恳求.
图 1 展示了整体的框架.可以看到,两个模块之间相对是独立的,它们之间的关联不是通过代码,而是通过索引和元数据.在下文中,我们将会具体介绍若何基于开源工具计划和实现这两个模块.
图 1. 系统架构图
以上是“<b>操纵Java开源工具成立一个机动的搜索引擎</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |