没有合适的资源?快使用搜索试试~ 我知道了~
首页Annotated Lucene 中文版 Lucene源码剖析
资源详情
资源评论
资源推荐
Javen-Studio 咖啡小屋 – Annotated Lucene(源码剖析中文版)
作者
naven
网站
http://javenstudio.org/
- 1 -
Annotated Lucene(源码剖析中文版)
Annotated Lucene 作者:naven
1 目录
Annotated Lucene(源码剖析中文版) ......................................................................................................... - 1 -
1 目录 ............................................................................................................................................................. - 1 -
2 Lucene 是什么 ............................................................................................................................................ - 3 -
2.1.1 强大特性 ............................................................................................................................. - 3 -
2.1.2 API 组成 .............................................................................................................................. - 4 -
2.1.3 Hello World! ..................................................................................................................... - 5 -
2.1.4 Lucene roadmap ................................................................................................................. - 6 -
3 索引文件结构 ............................................................................................................................................. - 7 -
3.1 索引数据术语和约定 ................................................................................................................. - 7 -
3.1.1 术语定义 ............................................................................................................................. - 7 -
3.1.2 倒排索引(inverted indexing) .................................................................................... - 8 -
3.1.3 Fields 的种类 .................................................................................................................... - 8 -
3.1.4 片断(segments) ............................................................................................................. - 8 -
3.1.5 文档编号(document numbers) ...................................................................................... - 9 -
3.1.6 索引结构概述 ..................................................................................................................... - 9 -
3.1.7 索引文件中定义的数据类型 ........................................................................................... - 10 -
3.2 索引文件结构 ........................................................................................................................... - 10 -
3.2.1 索引文件概述 ................................................................................................................... - 10 -
3.2.2 每个 Index 包含的文件 ................................................................................................... - 11 -
3.2.2.1 Segments 文件 ........................................................................................................ - 11 -
3.2.2.2 Lock 文件 ................................................................................................................ - 14 -
3.2.2.3 Deletable 文件 ...................................................................................................... - 14 -
3.2.2.4 Compound 文件(.cfs)......................................................................................... - 14 -
3.2.3 每个 Segment 包含的文件 ............................................................................................... - 15 -
3.2.3.1 Field 信息(.fnm) .............................................................................................. - 15 -
3.2.3.2 Field 数据(.fdx 和.fdt).................................................................................. - 16 -
3.2.3.3 Term 字典(.tii 和.tis) .................................................................................... - 18 -
3.2.3.4 Term 频率数据(.frq)......................................................................................... - 21 -
3.2.3.5 Positions 位置信息数据(.prx) ....................................................................... - 23 -
3.2.3.6 Norms 调节因子文件(.nrm) ............................................................................... - 24 -
3.2.3.7 Term 向量文件 ........................................................................................................ - 25 -
3.2.3.8 删除的文档 (.del)........................................................................................... - 28 -
3.3 局限性(Limitations) ............................................................................................................. - 29 -
4 索引是如何创建的 ................................................................................................................................... - 30 -
4.1 索引创建示例 ........................................................................................................................... - 30 -
Javen-Studio 咖啡小屋 – Annotated Lucene(源码剖析中文版)
作者
naven
网站
http://javenstudio.org/
- 2 -
4.2 索引创建类 IndexWriter ........................................................................................................... - 30 -
4.2.1 org.apache.lucene.index.IndexWriter ...................................................................... - 31 -
4.2.2 org.apache.lucene.index.DocumentsWriter .............................................................. - 33 -
4.3 索引创建过程 ........................................................................................................................... - 34 -
4.3.1 DocFieldProcessorPerThread.processDocument() .................................................... - 36 -
4.3.2 DocInverterPerField.processFields() ...................................................................... - 37 -
4.3.3 TermsHashPerField.addToken() .................................................................................... - 38 -
4.3.4 FreqProxTermsWriterPerField.newTerm()/addTerm() .............................................. - 39 -
4.3.5 TermVectorsTermsWriterPerField.newTerm()/addTerm() ........................................ - 42 -
5 索引是如何存储的 ................................................................................................................................... - 44 -
5.1 数据存储类 Directory ............................................................................................................ - 44 -
5.1.1 org.apache.lucene.store.Directory .......................................................................... - 44 -
5.1.2 org.apache.lucene.store.FSDirectory ...................................................................... - 44 -
5.1.3 org.apache.lucene.store.RAMDirectory .................................................................... - 45 -
5.1.4 org.apache.lucene.store.IndexInput ........................................................................ - 46 -
5.1.5 org.apache.lucene.store.IndexOutput ...................................................................... - 47 -
6 文档内容是如何分析的 ........................................................................................................................... - 49 -
6.1 文档分析类 Analyzer .............................................................................................................. - 49 -
6.1.1 org.apache.lucene.store.Analyzer ............................................................................ - 49 -
6.1.2 org.apache.lucene.store.StandardAnalyzer ............................................................ - 49 -
7 如何给文档评分 ....................................................................................................................................... - 50 -
7.1 文档评分类 Similarity .......................................................................................................... - 50 -
7.1.1 org.apache.lucene.search.Similarity ...................................................................... - 50 -
7.2 Similarity 评分公式 .............................................................................................................. - 51 -
Javen-Studio 咖啡小屋 – Annotated Lucene(源码剖析中文版)
作者
naven
网站
http://javenstudio.org/
- 3 -
2 Lucene 是什么
Apache Lucene 是一个高性能(high-performance)的全能的全文检索(full-featured text search engine)的搜
索引擎框架库,完全(entirely)使用 Java 开发。它是一种技术(technology),适合于(suitable for)几乎(nearly)
任何一种需要全文检索(full-text search)的应用,特别是跨平台(cross-platform)的应用。
2.1.1 强大特性
Lucene 通过一些简单的接口(simple API)提供了强大的特征(powerful features):
可扩展的高性能的索引能力(Scalable, High-Performance Indexing)
超过 20M/分钟的处理能力(Pentium M 1.5GHz)
很少的 RAM 内存需求,只需要 1MB heap
增量索引(incremental indexing)的速度与批量索引(batch indexing)的速度一样快
索引的大小粗略(roughly)为被索引的文本大小的 20-30%
强大的精确的高效率的检索算法(Powerful, Accurate and Efficient Search Algorithms)
分级检索(ranked searching)能力,最好的结果优先推出在前面
很多强大的 query 种类:phrase queries, wildcard queries, proximity queries, range queries 等
Javen-Studio 咖啡小屋 – Annotated Lucene(源码剖析中文版)
作者
naven
网站
http://javenstudio.org/
- 4 -
支持域检索(fielded searching),如标题、作者、正文等
支持日期范围检索(date-range searching)
可以按任意域排序(sorting by any field)
支持多个索引的检索(multiple-index searching)并合并结果集(merged results)
允许更新和检索(update and searching)并发进行(simultaneous)
跨平台解决方案(Cross-Platform Solution)
以 Open Source 方式提供并遵循 Apache License,允许你可以在即包括商业应用也包括 Open Source
程序中使用 Lucene
100%-pure Java(纯 Java 实现)
提供其他开发语言的实现版本并且它们的索引文件是兼容的
2.1.2 API 组成
Lucene API 被分成(divide into)如下几种包(package)
1. org.apache.lucene.analysis
定义了一个抽象的 Analyser API,用于将 text 文本从一个 java.io.Reader 转换成一个 TokenStream,即
包括一些 Tokens 的枚举容器(enumeration)。一个 TokenStream 的组成(compose)是通过在一个
Tokenizer 的输出的结果上再应用 TokenFilters 生成的。一些少量的 Analysers 实现已经提供,包括
StopAnalyzer 和基于语法(gramar-based)分析的 StandardAnalyzer。
2. org.apache.lucene.document
提供一个简单的 Document 类,一个 document 只不过包括一系列的命名了(named)的 Fields(域),
它们的内容可以是文本(strings)也可以是一个 java.io.Reader 的实例。
3. org.apache.lucene.index
提供两个主要地饿类,一个是 IndexWriter 用于创建索引并添加文档(document),另一个是 IndexReader
用于访问索引中的数据。
4. org.apache.lucene.search
提供数据结构(data structures)来呈现(represent)查询(queries): TermQuery 用于单个的词(individual
words), PhraseQuery 用于短语,BooleanQuery 用于通过 boolean 关系组合(combinations)在一起的
queries。而抽象的 Searcher 用于转变 queries 为命中的结果(hits)。 IndexSearcher 实现了在一个单独
(single)的 IndexReader 上检索。
5. org.apache.lucene.queryParser
使用 JavaCC 实现一个 QueryParser。
6. org.apache.lucene.store
定义了一个抽象的类用于存储呈现的数据(storing persistent data),即 Directory(目录),一个收集器
(collection)包含了一些命名了的文件(named files),它们通过一个 IndexOutput 来写入,以及一个
IndexInput 来读取。提供了两个实现,FSDirectory 使用一个文件系统目录来存储文件,而另一个
Javen-Studio 咖啡小屋 – Annotated Lucene(源码剖析中文版)
作者
naven
网站
http://javenstudio.org/
- 5 -
RAMDirectory 则实现了将文件当作驻留内存的数据结构(memory-resident data structures)。
7. org.apache.lucene.util
包含了一小部分有用(handy)的数据结构,如 BitVector 和 PriorityQueue 等。
2.1.3 Hello World!
下面是一段简单的代码展示如何使用 Lucene来进行索引和检索(使用 JUnit 来检查结果是否是我们预期的):
为了使用 Lucene,一个应用程序需要做如下几件事:
1. 通过添加一系列 Fields 来创建一批 Documents 对象。
2. 创建一个 IndexWriter 对象,并且调用它的 AddDocument()方法来添加进 Documents。
3. 调用 QueryParser.parse()处理一段文本(string)来建造一个查询(query)对象。
4. 创建一个 IndexReader 对象并将查询对象传入到它的 search()方法中。
// Store the index in memory:
Directory directory = new RAMDirectory();
// To store an index on disk, use this instead:
//Directory directory = FSDirectory.getDirectory("/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);
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.length());
// Iterate through the results:
for (int i = 0; i < hits.length(); i++) {
Document hitDoc = hits.doc(i);
assertEquals("This is the text to be indexed.", hitDoc.get("fieldname"));
}
isearcher.close();
directory.close();
剩余52页未读,继续阅读
nicky_zs
- 粉丝: 136
- 资源: 83
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论8