Lucene In Action 中文版 [1]

来源:互联网 发布:企业大数据运营平台 编辑:程序博客网 时间:2024/04/30 19:09

jimoxing写在前面的话:本人整理此书发表在CSDN,不做任何商业用途,完全本着为人民服务。

请转载的各位加上访问地址:http://blog.csdn.net/jimoxing2009/article/details/7236084

并且注意素质。


Lucene In Action 中文版 [1] 包含:

1.目录

2.序

3.前言

4.致谢

5.本书简介

6.谁应该阅读本书?

7.代码示例【下载书中代码的地方和说明】

8.为什么使用JUnit?

 

目录

第一部分 Lucene核心

1. 接触Lucene

2. 索引

3. 为程序添加搜索

4. 分析

5. 高极搜索技术

6. 扩展搜索


第二部分 Lucene应用

7. 分析常用文档格式

8. 工具和扩充

9. Lucene其它版本

10. 案例学习


Lucene开始是做为私有项目。在1997年末,因为工作不稳定,我寻找自己的一些东西来卖。Java是比较热门的编程语言,我需要一个理由来学习它。我已经了解如何来编写搜索软件,所以我想我可以通过用Java写搜索软件来维持生计。所以我写了Lucene。几年以后,在2000年,我意识到我没有销售天赋。我对谈判许可和合同没有任何兴趣,并且我也不想雇人开一家公司。我喜欢做软件,而不是出售它。所以我把Lucene放在SourceForge上,看看是不是开源能让我继续我想做的。有些人马上开始使用Lucene。大约一年后,在2001年,Apache提出要采纳Lucene。Lucene邮件列表中的消息每天都稳定地增长。也有 人开始贡献代码,大多是围绕Lucene的边缘补充:我依然是仅有的理解它的核心的开发者。尽管如些,Lucene开始成为真正的合作项目。现在,2004年,Lucene有一群积极的深刻理解其核心的开发者。我早已不再每天作开发,这个强有力的工作组在进行实质性的增加与改进。这些年来,Lucene已经翻译成很多其它的语言包括C++、C#、Perl和Python。在最开始的Java和其它这些语言中,Lucene的应用比 我预想的要广泛地多。它为不同的应用(如财富100公司讨论组、商业Bug跟踪、Microsoft提供的邮件搜索和100页面范围的Web搜索引擎)提供搜索动力。在业内,我被介绍为“Lucene人”。很多人告诉我他们在项目中使用到Lucene。我依然认为我只听说了使用Lucene的程序的小部 分。如果我当初只是出售它,Lucene应用得不会这么广泛。程序开发人员看来更喜欢开源。他们在有问题时不用联系技术支持而只需查看一下源代码。如果这还不够,邮件列表中的免费支持比大多商业支持要好得多。类似Lucene的开源项目使得程序开发人员更加有效率。Lucene通过开源已经变得比我想象的伟大的多。我见证了它的发展,是Lucene社区的努力才使得它如此兴旺。Lucene的未来怎样?我无法回答。有了这本书,你现在也是Lucene社区的一员,现在由您将Lucene带往新的高地。旅途顺利!

Lucene和Nutch的作者[DOUG CUTTING ]


前言

[来自ErikHatcher]

在Internet早期我就对搜索和索引感兴趣。我已经建立了用majordomo、MUSH(Mail User’s Shell)和少量Perl、 awk及shell脚本来管理邮件列表的存储结构。我实现了一个CGI的web接口,允许用户搜索这个列表和其它用户的信息,其内部使用了grep。然后 相继出现了Yahoo!、AltaVista和Excite,这些我都经常访问。

在我有了第一个儿子Jakob之后,我开始了数字照片档案的设计。我想开发一套管理图片的系统,可以给图片附加元数据,如关键字、拍摄日期。当然用我选择的尺寸定位图片是很容易的。在19世纪90年代末,我构建了基于文件系统的原型,使用了Microsoft的技术,包括 Microsoft Index Server、Action Server Pages及处理图片的第三方COM组件。从那时起,我的职业生涯都消耗在这些类似的技术上了。 I was able to cobble together a compelling application in a couple ofdays of spare-time hacking.

我的职业转向Java技术,并且我越来越少地利用Microsoft Windows。为了以系统无关的方式用Java技术重新实现我的个人照片档案系统及搜索引擎,我使用了Lucene。Lucene的简单易用远远超过了我的期望—我所期望的其它开源库或工具在概念上简单,但是却难以使用。

在2001年,Steve Loughran和我开始编写Java Development withAnt(Manning)。我们采用图片搜索引擎 的思想,并把它推广为一个文档搜索引擎。这个程序示例在那本Ant书中使用,而且可被定制为图片搜索引擎。Ant的责任不仅来自于简单的编译打包的构建过 程,也来自于定制的任务,<index>,我们在构建过程中使用Lucene创建索引文件。Ant任务现在生存在Lucene的Sandbox(沙箱)中,将在本书8.4节描述。Ant已经应用在我的博客系统中,我称为BlogScene(http://www.blogscene.org/erik)。在建立一个博客实体之,我运行一个Ant构建过程,索引新的实体并将它们上传到我的服务器上。

我的博客服务器由一个Servlet、一些验证模板和一个 Lucene索引组成,允许(rich)查询,甚至联合查询。与其它博客系统相比,BlogScene在特色和技巧上差很多,但是它的全文检索能力非常强 大。

我现在效力于维吉尼亚大学对Patacriticism 的应用研究小组(http://www.patacriticism.org)。我用对文本分析、索引和搜索的经验通过讨论量子力学与艺术的关系来测试及拓展我的思路。“诗人是世界上不被认可的最伟大的工程师”。


来自[OtisGospodnetic]

我对信息搜索与管理的兴趣和热情开始于在Middlebury大学的学生时代。那时候,我发现了信息的广大资源,即Web。尽管Web仍然刚开始发展,但 是对收集、分析、索引和搜索的长期需求是很明显的。我开始对建立来自Web的信息库感到困惑,开始编写Web爬行器梦想有种方法可以对这些收集的信息进行 搜索。我认为在巨大的未知领域中搜索是杀手级软件。有了这种思想以后,我开始了一系列收集和搜索项目。

在1995年,和同学Marshall Levin一起创建了WebPh,一个用来收集和找出个人联系信息的开源程序。基本上,这是一个简单的具有Web 接口(CGI)的电话本,那时排在首位的类型。(实际上,它在19世纪90年代末的案例学习中被引用为一个示例。)大学和政府机构是这个程序的主要用户, 现在还有很多在使用它。在1997年使用我的WebPh,我继续创建了Populus,一个当时很流行的白页。尽管技术(与WebPh类似)很普通,但是 Populus有很重的负担,并且能够与WhoWhere、Bigfoot和Infospace等大角色相媲美。

在两个关于个人联系信息的项目之后,是该探索新的领域了。我开始了下一个冒险,Infojump,用来在网上时事通讯、杂志、报纸中选择高质量的信息。我拥有的软件由大量的Perl模块和脚本组成,Infojump利用一个称作Webinator的Web爬行器和一个全文搜索的产品叫作Texis。在1998年Infojump提供的服务很像今天的FindArticles.com。尽管WebPh、Populus和Infojump达到了它们的目的并是功能很完善,但它们都有技术的局限性。它们缺少的是一个用反向索引来支持全文搜索强大的信息搜索库。为了不重复相同的工作,我开始搜寻一个我认为不可能存在的解决方案。在2000年早期,我发现了Lucene,我正在寻找的缺少的部 分,并且我一下子就喜欢上了它。

我在Lucene还在SourceForge的时候就加入了这个项目,后来2002年Lucene转移到Apache软件基金会。我对Lucene的热爱 是因为这些年来它已经成为我很多思想的核心组件。这些思想中的一个是Simpy,我最近的一个项目。Simpy是个有许多特点的个性Web服务,可以让用户加标签、索引、搜索和共享在网上找到的信息。它主要使用了Lucene,上千条索引,由Doug Cutting的另一个项目Nutch(见第10章) 提供动力支持。我对Lucene的积极参与导致我被邀请与Erik Hatcher共同编写Lucene in Action。

Lucene In Action有关于Lucene最全面的信息。接下来的10章包含的信息围绕你使用Lucene创建优秀程序所需的所有主题。这是它 平坦且轻快的协作过程的结果,就像Lucene社区一样。

Lucene和Lucene in Action证明了有类似兴趣的人们可以完成什么,不管在人生中会碰到什么情况,都会积极地为全球知识的共享做出贡献。


致谢

首先并且是最重要的,我们感谢我们的妻子Carole(Erik)和Margaret(Otis),一直支持这本书的写作。没有她们的支持,这本书就不可 能出版。Erik感谢他的两个儿子,Ethan和Jakob,因为他们的忍耐和理解,Erik写这本书时没有时间陪他们玩耍。

我们真诚感谢Doug Cutting。没有Doug的贡献,就不可能有Lucene。没有其他Lucene的贡献者,Lucene就会少很多特征、更多 的Bug,Lucene的成长就会花更长的时间。感谢所有的贡献者,包括PeterCarlson、Tal Dayan、Scott Ganyo、 Eugene Gluzberg、Brian Goetz、Christoph Goller、Mark Harwook、TimJones、 Daniel Naber、Andrew C.Oliver、Dmitry Serebrennikov、Kelvin Tan和 Matt Tucher。同时,我们感谢所有贡献在第10章的案例的人:Dion Almaer、MichaelCafarella、 Bob Carpenter、Karsten Konrad、Terence Parr、Robert Selvaraj、 Ralf Steinbach、Holger Stenzhorn和Craig Walls。


本书简介

Lucene in Action为使用最好的Java开源搜索引擎的用户提供所有细节、最好的实践、警告、技巧。

本书假设读者熟悉基本的Java编程。Lucene本身是个Java档案(JAR)文件并能集成到简单的命令行程序和大型企业级应用程序中。

Roadmap我们在本书第1部分覆盖Lucene核心编程接口(API)使你在将Lucene整合到你的程序中时愿意使用它:

第一部分

第1章、接触Lucene。我们介绍了一些基本的信息搜索术语和Lucene的主要竞争对手。我们很快地构建了一个你马上能用或修改以适应需要的简单索引和搜索程序。这     个示例程序向你打开了探索Lucene其它能力的大门。

第2章、使你熟悉Lucene基本的索引操作。我们描述了索引数值和日期的不同字段类型和各种技术。包括调整索引过程、优化索引以及如何处理线程安全。

第3章、向你介绍基本的搜索,包括Lucene如何根据查询来排列文档的细节。我们讨论基础的查询类型及它们如何通过用户输入的查询表达式创建。

第4章、深入研究Lucene的索引核心,分析过程。分析器创建块及单词、单词流和单词过滤器。我们创建了一些定制的分析器, showcasing synonym injection and      metaphone(like soundex)replacement.也分析 了非英语语言,典型的分析汉字文本的示例。

第5章、讲述搜索章节剩余的。我们描述了一些高级的搜索特征,包括排序、过滤及使用词向量。高级的查询类型在此出现,包括SpanQuery家族。最后,我们讨论了     Lucene对查询多索引的内建支持,并行的及远程的。

第6章、超越高级搜索,向你展示了如何扩展Lucene的搜索能力。你将学到如何定制搜索结果的排序、扩展查询表达式分析、实现Hit收集和调整查询性能。


第二部分【超越Lucene内建的工具并向你展示围绕Lucene可以做什么。】

第7章、我们创建了可重用、可扩展的用来分析Word、HTML、XML、PDF及其它格式文档的框架。

第8章、包括围绕Lucene的扩展和工具。我们描述了一些Lucene的索引查看和开发工具以及Lucene沙箱中的好东西。高亮搜索项就是这种你想要的沙箱扩展,还有在      Ant构建过程中创建索引的其它工具。使用noncore分析器,并使用类似WordNet的索引。

第9章、描述Lucene翻译成其它各种语言的版本,如C++、C#、Perl和Python。

第10章、将Lucene的技术细节带到大量优秀的案例学习中。这些案例由那些创建了以Lucene为核心的有趣的、快速的、可升级的程序的开发者提供。


谁应该阅读本书?

在程序中需要强大搜索能力的开发人员需要阅读这本书。Lucene in Action也适合于那些对Lucene或索引和搜索技术好奇的开发人员,他们 可能不会马上就用到它。把Lucene添加到你的工具箱对以后的项目来说是值得的—搜索是个热门的话题并且将来也会是。

这本书主要使用Java版的Lucene(来自ApacheJakarta),并且大多数示例使用Java。最适合熟悉Java的读者。Java经验是很有帮助的,然而Lucene已经翻译成很多其它的语言包括C++、C#、Python和Perl。概念、技术甚至API本身都和Java版Lucene 差不多。


代码示例

本书的源代码可以从Manning的网站http://www.manning.com/hatcher2上下载。代码的使用说明包含在代码包的README文件。书中出现的大多数代码是由我们编写并包含在代码包中。某些代码(尤其是案例代码)不在我们的代码包中提供。书中的代码片断归贡献者所有。同时,我们包含了Lucene代码库的部分代码,基于Apache软件许可协议(http://www.apache.org/licenses/LICENSE-2.0)。代码示例不包括package 和import 语句,以节省空间;具体请参照实际代码。


为什么使用JUnit?

我们相信书中的代码示例应该都是高质量的。典型的“hello world”例子经常帮助读者测试他们的环境。

我们使用独特的方法来使用书中的代码示例。大部分示例是实际的JUnit 测试用例(http://www.junit.org)。 JUnit,是Java单元测试框架,可以断言一个特殊情况是否能以可重复的方式出现。通过IDE或Ant进行自动JUnit测试用例可以一步一步地构筑系统。我们在本

书用使用JUnit是因为平时都在其它项目中使用,并想让你看看我们如何编码。测试驱动开发(Test DrivenDevelopment, TDD)是我们强烈推荐的开发模式。如果你对JUnit不熟,请阅读以下基础。我们也建议你阅读Dave Thomas和Andy Hunt编著的《PragmaticUnit Testing in Java with JUnit》,还有Vincent Massol和Ted Husted编 著的《JUnitin Action》。