欢迎来到天天文库
浏览记录
ID:18941195
大小:133.00 KB
页数:12页
时间:2018-09-22
《本章包括.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章索引本章包括n执行基本索引操作n在索引时添加Document和Fieldn索引日期、数值和用来排序搜索结果的字段n使用影响Lucene索引性能和资料消耗的参数n优化索引你可能想搜索存储在硬盘上的文件或者搜索你的邮件、网页甚至数据库中的数据。Lucene能够帮助你。然页,在你能够搜索之前,你应该对它进行索引,这也是本章你所要学习的内容。在第1章中,你看到了一个简单的索引示例。本章将深入并都你有关索引更新、调整索引过程的参数和更多高级索引技术以帮助你更加了解Lucene。此处你也会发现Lucene索引的结构、当以多线程或多进程访问
2、Lucene索引时要注意的重要问题和Lucene提供的防止并发修改索引的锁机制。2.1理解索引过程正如你在第1章中所见,为索引一个文档只需调用LuceneAPI的几个方法。所以,表面看来,用Lucene进行索引是个简单的操作。然而在这些简单API的背后隐藏了一些有趣且相当复杂的操作集合。我们可以将这个集合分为三个主要的功能,如图2.1所示,在随后的几个小节中描述。图2.1使用Lucene索引分为三个主要步骤:将数据转化为文本,分析,将它保存至索引2.1.1转化为文本为用Lucene索引数据,你必须首先将它转化为纯文本单词流,Luce
3、ne能消化的格式。在第1章中,我们限制示例索引和搜索.txt文件,这允许我们分析它的内容并使它来生成Field的实例。然而,事情并不总是那么简单。假设你要索引一些PDF格式的手册。为了准备这些手册以进行索引,你必须首先提取出PDF文档中的文本信息并使用这些提取的数据来创建LuceneDocument及其Field。你回顾21页的表1.2,你会发现Field方法总是接受String值,有时是Date和Reader值。没有哪个方法接受PDF的类型,既使这种类型存在。在索引MicrosoftWord文档或其它任何非纯文本格式的文档时你都会
4、遇到这个问题。甚至你在处理使用纯文本的符号的XML或HTML文档时,你仍然需要足够的智能来准备这些数据来进行索引,避免索引类似XML元素或HTML标签的东西,而要索引这些文档中的真实数据。文本提取的细节在第7章,我们构建了一个小但是完整的框架以索引图2.1所示的所有文档格式及其它几种格式。实际上,你会发现图2.1和图7.3很类似。2.1.2分析一旦你准备好了要索引的数据并创建了由Field组成的LuceneDocument,你就可以调用IndexWriter的addDocument(Document)方法,把你的数据送入Lucene
5、索引。当你做这些时,Lucene首先分析这些数据以使它更适合索引。它将文本数据分割成块或单词,并执行一些可选择的操作。例如,单词可以在索引之前转化为小写,以保证搜索是大小写无关的。典型的,它也有可能排除转入中所有经常出现但无意义的词,例如英语终止词(a,an,the,in,on等等)。类似的,通常分析输入单词以获取它的本质。这个非常重要的步骤称为分析。Lucene的输入能够以很多有趣且有用的方法进行分析,所以我们将在第4章详细分析这个过程。目前,把这个步骤想像为一个过滤器。2.1.3写索引在输入被分析完后,就可以添加到索引中了。Lu
6、cene将输入存储在一个反向索引的数据结构中。这个数据结构在允许快速关键字查询的同时有效地利用了磁盘空间。这个结构反向是因为它使用从输入中提取的单词做为查询键值而不是用处理的文档做为中枢入口。换句话说,代替尝试回答这个问题“这个文档中含有哪些单词?”,这个结构为提供快速回答“哪篇文档含有单词X?”做了优化。如果你想一下你常用的Web搜索引擎和你典型的查询格式,你会发现你想得到的精确的查询。当今所有的Web搜索引擎的核心都是反向索引。使得各搜索引擎不同的是一组严格保密的附加参数来改进这个索引结构。例如Goolge知名的级别(PageR
7、ank,PR)因素。Lucene也有它自己的一套技术,你可以在附录B中学到其中一些。2.2基本索引操作在第1章中,你看到了如何向索引中添加文档。但是我们将在此总结这个过程,同时描述删除和更新操作,以给你一个方便的参数点。2.2.1向索引中索加文档为了总结你已知的,让我们来看一下在本章中作为单元测试基类的代码片断。代码列表2.1创建一个复合的索引称做index-dir(索引目录),存储于系统临时目录:UNIX的/tmp,或使用Windows的C:TEMP。(复合索引在附录B中描述)我们使用SimpleAnalyzer来分析输入文本,
8、然后我们索引两个简单的Document,每个都包含四种类型的Field:Keyword、UnIndexed、UnStored和Text。列表2.1在基本测试类的每个测试之前准备一个新的索引publicabstractclassBase
此文档下载收益归作者所有