Lucene

Lucene概述

课程概述

本课程是企业级的搜索系统,既可以自成体系,拿出来作为一个单独的系统里来使用;也可以集成到其他现有的系统中,成为其他系统的一个重要的模块(现在很多网站内部都集成了一个全文检索系统,很多OA系统都有一个全文检索系统)。

认识Lucene

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到明显的增强,也吸引了更多的用户和开发人员。2004年7月,Lucene1.4版正式发布,10月的1.4.2版本做了一次bug修正。

Lucene优势

作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。

Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。

突出优点

Lucene作为一个全文检索引擎,其具有如下突出的优点:

(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。

(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。

(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。

(4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。

(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。

面对已经存在的商业全文检索引擎,Lucene也具有相当的优势。

首先,它的开发源代码发行方式(遵守Apache Software License[12]),在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作技术和面向对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上,商业软件的灵活性远远不及Lucene。

其次,Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF[13]等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。

最后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework[14]),在遵守Lucene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。

lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util。

Lucene经典应用

Lucene is a powerful Java search library that lets you easily add search to any application.In recent years Lucene has become exceptionally popular and is now the most widely used information retrieval library: it powers the search features behind many websites and desktop applications. Although it’s written in Java, thanks to its popularity and the determination of zealous developers you now have at your disposal a number of ports or integrations to other programming languages (C/C++,C#, Ruby, Perl, Python, and PHP, among others).

One of the key factors behind Lucene’s popularity is its simplicity, but don’t let that fool you: under the hood sophisticated, state-of-the-art information retrieval techniques are quietly at work. The careful exposure of its indexing and searching API is a sign of the well-designed software. You don’t need in-depth knowledge about how Lucene’s information indexing and retrieval work in order to start using it. Moreover, Lucene’s straightforward API requires using only a handful of classes.to get started. Finally, for those of you tired of bloatware, Lucene’s core JAR is refreshingly tiny—only 1 MB—and it has no dependencies!

Lucene jar包下载

用户可以到http://lucene.apache.org/java下载Lucene开发所需要的jar包,这个网站上我们可以使用下载到Lucene的API或者是DOC文档,也可以看到Lucene最新版本的新的特性,以及一些bug的追踪。都可以在该网站上找到。本章节中我们使用Lucene3.5版本作为本次课程的研究对象。

点击Download按钮跳转到下载页面,我们可以下载到Lucene的任何一个版本。我们可以打开Lucene为用户提供的静态镜像下载,在该页面可以下载到Lucene的任何一个版本。

最终用户可以在Lucene的官网上下载到所需要的jar包和源码。

这样基本上就准备好了Lucene开发的基本jar包。这里推荐大家在学习的时候看一本参考书Lucene in Action 2.pdf是英文的,但是介绍的比较详细。

Lucene系统架构

Lucene的特点

Lucene是基于索引库收索的全文搜索工具类,不是一个完整的搜索引擎或者是应用。正是Lucene的这种小巧和灵活以及其强大的收缩功能,使得Lucene被广泛的应用到了互联网应用和桌面的收索应用中。目前主流的网站的收索大都是基于Lucene的全文收索。Lucene的全文检索广泛的应用在互联网收索、电商、OA系统、桌面应用。Lucene创建的索引具有一次创建,多次使用的特点。大大的加快了用户对信息的检索速度。这也是通常读者可能在有关Lucene的资料上看到的IR(information search)。

注意:刚学习Lucene的学者错误的认为Lucene是一个成形的应用例如文件收索,网络爬虫、网站的收索引擎等,其实Lucene仅仅是一个java的工具类,不是一个全文搜索的应用。

核心包功能介绍

Lucene的全文检索是基于对索引的搜索,所谓的索引是通过Lucene高效的cross-reference算法创建的二进制文件,在学习Lucene之前需要我们仔细观察Lucene的索引库的创建以及查询机制,如图所示。

创建索引库 查询索引库

以上两个图分别大致的绘制出了Lucene的的创建索引和查询索引的整个过程,大体上也就是使用Lucene的API实现索引的创建和索引的查询。

创建索引(Component for indexing)

假设你需要搜索大量的文件,并且你想找到文件包含某个单词或短语。你会如何去写一个程序来做 这个?一个幼稚的方法是依次扫描每个文件的给定的单词或 短语。虽然这种方法是有效的,它具有许多缺陷,最明显的 当我们在一个80G数据的磁盘上找到包含某一个字符串的文件或者是短语这种做法就行不通了。

索引的概念引入:快速搜索大量文本,你必须首先索引的文本,并将其转换成可以让你快速搜索它的格式,消除缓慢顺序扫描过程。这个转换过程被称为索引,且其输出被称为一个索引。因此我们这里给出索引的定义:把文本信息提取出来并且重新组织的部分我们称这部分内容为索引。

这里我们可以这样理解所谓的索引是一种数据该数据允许你快速的随机访问该数据文件。索引是一种特殊的数据结构文件,一般保存在文件系统上。对于索引的结构我们会在后续的章节给大家介绍到,但是目前对于Lucene索引的理解就是索引其实就是一个工具可以快速的帮助我们查找单词或者是短语。

第一步、获取内容(Accquire Content)

创建索引的第一步是获取一个被索引的文本,这些对于我们来说是没有任何问题的。例如:你要从很多的XML文件中提取出信息或者是从数据库中获取数据等,这都是我们获取数据的来源,当然这些数据的我们也可以使用爬虫或者是其他的技术手段获取,更有可能这些数据极其的杂碎和分散。

Lucene中,作为核心的搜索库,不提供任何功能,支持获取内容。这完全取决于你的应用程序,或单独的软件。有一些开源的抓取工具可供选择,其中包括以下:

Solr(http://lucene.apache.org/solr)已经支持了关系数据库和XML等的支持,以及通过整合Tika处理丰富的文档信息.

Nutch (http://lucene.apache.org/nutch),是Lucene下的一个姊妹项目支持强的的网络爬虫技术;类似的网站爬虫有 Grub (http://www.grub.org),Heritrix(http://crawler.archive.org).

第二步、构建Document

一旦手中获取到了所要建立文本文件,我们必须将该文件转换为一系列的Document以便于搜索引擎搜索。而每一个Document又是由一系列的命名的Field组成。例如我们拿到一篇文章我们可以需要将该片文章转换为一个Document对象,那么对于这个对象我们可以认为它是由 若干个Field组成每一个Field其实就是即将被索引的文章的属性。例如 文章的 author 、title、content、price 、url等属性。

对于Document的另外一个问题就是对于每一个Document或者是Field 进行加权操作。

这些应用需哦需要我们在创建一个Document或者是Field时候指定,例如:你想自己的新闻稿第一个被收索到。这都需要我们对文档进行加权操作。

第三步、Analyzer Docuement

一个文本信息不会被直接索引,我们需要将文本信息进行一步预处理,事实上一般是将一个字符串拆封成若干个的短语单元我们称作为tokens,这就是我们在创建的Analyzer Document的实际所做的事情。每一个Token我们可以大大致的认为是一个字的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java码库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值