Lucene源代码剖析

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

跨平台解决方案(Cross-Platform Solut ion ) � 以 Open Source 方式提供并遵循 Apache License , 允许你可以在即包括商业应用也 包 括 Open Source 程序中使用 Lucene � � 100%-pure Java (纯 Java 实现) 提供其他开发语言的实现版本并且它们的索引文件是兼容的
Lucene 通过一些简单的接口( simple API )提供了强大的特征( powerful features ):
可扩展的高性能的索引能力(Scalable, High- Performance Inde xing ) � � � 超过 20M/ 分钟的处理能力( Pentium M 1.5GHz ) 很少的 RAM 内存需求,只需要 1MB heap 增量索引( incremental indexing )的速度与批量索引( batch indexing )的速度一样 快 � 索引的大小粗略( roughly )为被索引的文本大小的 20-30%

org.apache.lucene.search
提供数据结构( data structures)来呈现( represent)查询( queries): TermQuer y 用于单个的词 (individual words), PhraseQuery 用于短语, BooleanQuery 用于通过 boolean 关系组合 (combinations )在一起的 queries 。而抽象的 Searcher 用于转变 queries 为命中的结果( hits)。 IndexSearcher 实现了在一个单独( single)的 IndexReader 上检索。 • org.apache.lucene. queryParser 使用 JavaCC 实现一个 QueryParser 。 • org.apache.lucene.store 定义了一个抽象的类用于存储呈现的数据 (storing persistent data),即 Directory (目录),一个收 集器( collection )包含了一些命名了的文件( named files ),它们通过一个 IndexOutput 来写入, 以及一个 IndexInput 来读取。提供了两个实现, FSDi rectory 使用一个文件系统目录来存储文件 , 而另一个 RAMDirectory 则实现了将文件当作驻留内存的数据结构( memo ry-resident data structures)。 • org.apache.lucene.util 包含了一小部分有用( handy)的数据结构,如 BitVector 和 PriorityQueue 等。
4.2.1 org.apache.lucene.index.IndexWriter 4.2.2 org.apache.lucene.index.DocumentsWriter 4.2.3 org.apache.lucene.index.SegmentMerger 5 数据是如何存储的 5.1 数据存储类 Directory 5.1.1 org.apache.lucene.store.Directory 5.1.2 org.apache.lucene.store.FSDirectory 5.1.3 org.apache.lucene.store.RAMDirectory 5.1.4 org.apache.lucene.store.IndexInput 5.1.5 org.apache.lucene.store.IndexOutput 6 文档内容是如何分析的 6.1 文档分析类 Analyzer 6.1.1 org.apache.lucene.store.Analyzer 6.1.2 org.apache.lucene.store.StandardAnalyzer 7 如何给文档评分 7.1 文档评分类 Similarity 7.1.1 org.apache.lucene.search.Similarity 7.2 Similarity 评分公式
Lucene API 被分成( divide into )如下几种包( package )

org.apache.lucene.anal ysis 定义了一个抽象的 Analyser API , 用于将 text 文本从一个 java.io.R eader 转换成一个 TokenStream, 即包括一些 Tokens 的枚举容器( enumeration )。一个 TokenStream 的组成(compose)是通过在 一个 Tokenizer 的输出的结果上再应用 TokenFilters 生成的。 一些少量的 Analysers 实现已经提 供 , 包括 StopAnalyzer 和基于语法( gramar-based)分析的 StandardAnalyzer 。
强大的精确的高效率的检索算法( Powerful, Accurate and Efficient Search Algorithms ) � � 分级检索( ranked searching )能力,最好的结果优先推出在前面 很多强大的 query 种类: phrase queries, wildcard queries, proximity queries, range queries 等 � � � � � 支持域检索( fielded searching ),如标题、作者、正文等 支持日期范围检索( date-range searching ) 可以按任意域排序( sorting by any field) 支持多个索引的检索( multiple-index searching )并合并结果集( merged results) 允许更新和检索( update and searching )并发进行( simultaneous )
2
Hello World!
下面是一段简单的代码展示如何使用 Lucene 来进行索引和检索(使用 JUnit 来检查结果是 否是我们预期的):
Leabharlann Baidu
1 2 3 4 5 6 7 8 9 10 11
// Store the index in memory: Directory directory = new RAMDirectory(); // To store an index on disk, use this instead: //Directory directory = FSDirectory.get Directory(”/tmp/testindex”); IndexWriter iwriter = new IndexWriter(directory, analyzer, true); iwriter.setMaxFieldLength(25000); Document doc = new Document(); String text = “This is the text to be indexed. “; doc.add( new Field(“fieldname “, text, Field.Store.YES, Field.Index.TOKENIZED)); iwriter.addDocument(doc);
为了使用 Lucene ,一个应用程序需要做如下几件事: 1. 2. 通过添加一系列 Fields 来创建一批 Document s 对象。 创建一个 IndexWriter 对象,并且调用它的 AddDocument() 方法来添加进 Documents 。 3. 4. 调用 QueryParser.parse() 处理一段文本( string )来建造一个查询( query )对象。 创建一个 IndexReader 对象并将查询对象传入到它的 search()方法中。

org.apache.lucene. document 提供一个简单的 Documen t 类, 一个 documen t 只不过包括一系列的命名了 (named ) 的 Fields (域 ), 它们的内容可以是文本( strings)也可以是一个 java.io.R eader 的实例。

org.apache.lucene.index 提供两个主要类, 一个是 IndexWriter 用于创建索引并添加文档 (document) , 另 一 个 是 IndexReader 用于访问索引中的数据。
Lucene 源码剖析
1 目录 2 Lucene 是什么 2.1.1 强大特性 2.1.2 API 组成2.1.3 Hello World! 2.1.4 Lucene roadmap 3 索引文件结构 3.1 索引数据术语和约定 3.1.1 术语定义 3.1.2 倒排索引(inverted indexing ) 3.1.3 Fields 的种类 3.1.4 片断(segments ) 3.1.5 文档编号(document numbers ) 3.1.6 索引结构概述 3.1.7 索引文件中定义的数据类型 3.2 索引文件结构 3.2.1 索引文件概述 3.2.2 每个 Index 包含的文件 3.2.2.1 Segments 文件 3.2.2.2 Lock 文件 3.2.2.3 Deletable 文件 3.2.2.4 Compound 文件(.cfs) 3.2.3 每个 Segment 包含的文件 3.2.3.1 Field 信息(.fnm) 3.2.3.2 Field 数据(.fdx 和.fdt) 3.2.3.3 Term 字典(.tii 和.tis ) 3.2.3.4 Term 频率数据(.frq) 3.2.3.5 Positions 位置信息数据(.prx) 3.2.3.6 Norms 调节因子文件(.nrm)3.2.3.7 Term 向量文件 3.2.3.8 删除的文档 (.del) 3.3 局限性(Limitations) 4 索引是如何创建的 4.1 索引创建示例 4.2 索引创建类 IndexWriter
1
Lucene 是什么
Apache Lucene 是一个高性能( high-perf ormance )的全能的全文检索( full-featured text search engine ) 的搜索引擎框架库,完全 (entirely ) 使用 Java 开发。 它是一种技术(technol ogy ), 适合于( suitable for)几乎( nearly )任何一种需要全文检索( full-text search)的应用,特别 是跨平台( cross-platform)的应用。
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
iwriter.optimize(); iwriter.close();
// Now search the index: IndexSearcher isearcher = new IndexSearcher( directory); // Parse a simple query that searches for ”text ”: QueryParser parser = new QueryParser( “fieldname“, analyzer); Query query = parser.parse(“text“); Hits hits = isearcher.search(query); assertEquals(1, hits.lengt h()); // Iterate through the results: for (int i = 0; i < hits.lengt h(); i++) { Document hitDoc = hits.doc(i); assertEquals(“This is the text to be indexed.“, hitDoc.get( “fieldname“)); } isearcher.close(); directory.close();
相关文档
最新文档