`

Lucene 原理与代码分析完整版

阅读更多

Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新。

 

完整版pdf可由以附件下载。

 

 

目录如下:

 

 

目录

目录

第一篇:原理篇

第一章:全文检索的基本原理

一、总论

二、索引里面究竟存些什么

三、如何创建索引

第一步:一些要索引的原文档(Document)

第二步:将原文档传给分次组件(Tokenizer)

第三步:将得到的词元(Token)传给语言处理组件(Linguistic Processor)

第四步:将得到的词(Term)传给索引组件(Indexer)

1. 利用得到的词(Term)创建一个字典。

2. 对字典按字母顺序进行排序。

3. 合并相同的词(Term)成为文档倒排(Posting List)链表。

四、如何对索引进行搜索?

第一步:用户输入查询语句。

第二步:对查询语句进行词法分析,语法分析,及语言处理。

1. 词法分析主要用来识别单词和关键字。

2. 语法分析主要是根据查询语句的语法规则来形成一棵语法树。

3. 语言处理同索引过程中的语言处理几乎相同。

第三步:搜索索引,得到符合语法树的文档。

第四步:根据得到的文档和查询语句的相关性,对结果进行排序。

1. 计算权重(Term weight)的过程。

2. 判断Term之间的关系从而得到文档相关性的过程,也即向量空间模型的算法(VSM)

第二章:Lucene的总体架构

第二篇:代码分析篇

第三章:Lucene的索引文件格式

一、基本概念

二、基本类型

三、基本规则

1. 前缀后缀规则(Prefix+Suffix)

2. 差值规则(Delta)

3. 或然跟随规则(A, B?)

4. 跳跃表规则(Skip list)

四、具体格式

4.1. 正向信息

4.1.1. 段的元数据信息(segments_N)

4.1.2. (Field)的元数据信息(.fnm)

4.1.3. (Field)的数据信息(.fdt.fdx)

4.1.3. 词向量(Term Vector)的数据信息(.tvx.tvd.tvf)

4.2. 反向信息

4.2.1. 词典(tis)及词典索引(tii)信息

4.2.2. 文档号及词频(frq)信息

4.2.3. 词位置(prx)信息

4.3. 其他信息

4.3.1. 标准化因子文件(nrm)

4.3.2. 删除文档文件(del)

五、总体结构

第四章:Lucene索引过程分析

一、索引过程体系结构

二、详细索引过程

1、创建IndexWriter对象

2、创建文档Document对象,并加入域(Field)

3、将文档加入IndexWriter

4、将文档加入DocumentsWriter

4.1、得到当前线程对应的文档集处理对象(DocumentsWriterThreadState)

4.2、用得到的文档集处理对象(DocumentsWriterThreadState)处理文档

4.3、用DocumentsWriter.finishDocument结束本次文档添加

5DocumentsWriterCharBlockPoolByteBlockPoolIntBlockPool的缓存管理

6、关闭IndexWriter对象

6.1、得到要写入的段名

6.2、将缓存的内容写入段

6.3、生成新的段信息对象

6.4、准备删除文档

6.5、生成cfs

6.6、删除文档

第五章:Lucene段合并(merge)过程分析

一、段合并过程总论

1.1、合并策略对段的选择

1.2、反向信息的合并

二、段合并的详细过程

2.1、将缓存写入新的段

2.2、选择合并段,生成合并任务

2.2.1、用合并策略选择合并段

2.2.2、注册段合并任务

2.3、段合并器进行段合并

2.3.1、合并存储域

2.3.2、合并标准化因子

2.3.3、合并词向量

2.3.4、合并词典和倒排表

第六章:Lucene打分公式的数学推导

第七章:Lucene搜索过程解析

一、Lucene搜索过程总论

二、Lucene搜索详细过程

2.1、打开IndexReader指向索引文件夹

2.1.1、找到最新的segment_N文件

2.1.2、通过segment_N文件中保存的各个段的信息打开各个段

2.1.3、得到的IndexReader对象如下

2.2、打开IndexSearcher

2.3QueryParser解析查询语句生成查询对象

2.4、搜索查询对象

2.4.1、创建Weight对象树,计算Term Weight

2.4.2、创建ScorerSumScorer对象树

2.4.3、进行倒排表合并

2.4.4、收集文档结果集合及计算打分

2.4.5Lucene如何在搜索阶段读取索引信息

第八章:Lucene的查询语法,JavaCCQueryParser

一、Lucene的查询语法

二、JavaCC介绍

2.1、第一个实例——正整数相加

2.2、扩展语法分析器

2.3、第二个实例:计算器

三、解析QueryParser.jj

3.1、声明QueryParser

3.2、声明词法分析器

3.3、声明语法分析器

第九章:Lucene的查询对象

1BoostingQuery

2CustomScoreQuery

3MoreLikeThisQuery

4MultiTermQuery

4.1TermRangeQuery

4.2NumericRangeQuery

5SpanQuery

5.1SpanFirstQuery

5.2SpanNearQuery

5.3SpanNotQuery

5.4SpanOrQuery

5.5FieldMaskingSpanQuery

5.6PayloadTermQueryPayloadNearQuery

6FilteredQuery

6.1TermsFilter

6.2BooleanFilter

6.3DuplicateFilter

6.4FieldCacheRangeFilter<T>FieldCacheTermsFilter

6.5MultiTermQueryWrapperFilter<Q>

6.6QueryWrapperFilter

6.7SpanFilter

6.7.1SpanQueryFilter

6.7.2CachingSpanFilter

第十章:Lucene的分词器Analyzer

1、抽象类Analyzer

2TokenStream抽象类

3、几个具体的TokenStream

3.1NumericTokenStream

3.2SingleTokenTokenStream

4Tokenizer也是一种TokenStream

4.1CharTokenizer

4.2ChineseTokenizer

4.3KeywordTokenizer

4.4CJKTokenizer

4.5SentenceTokenizer

5TokenFilter也是一种TokenStream

5.1ChineseFilter

5.2LengthFilter

5.3LowerCaseFilter

5.4NumericPayloadTokenFilter

5.5PorterStemFilter

5.6ReverseStringFilter

5.7SnowballFilter

5.8TeeSinkTokenFilter

6、不同的Analyzer就是组合不同的TokenizerTokenFilter得到最后的TokenStream

6.1ChineseAnalyzer

6.2CJKAnalyzer

6.3PorterStemAnalyzer

6.4SmartChineseAnalyzer

6.5SnowballAnalyzer

7Lucene的标准分词器

7.1StandardTokenizerImpl.jflex

7.2StandardTokenizer

7.3StandardFilter

7.4StandardAnalyzer

8、不同的域使用不同的分词器

8.1PerFieldAnalyzerWrapper

第三篇:问题篇

问题一:为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”?

问题二:stemminglemmatization的关系

问题三:影响Lucene对文档打分的四种方式

在索引阶段设置Document BoostField Boost,存储在(.nrm)文件中。

在搜索语句中,设置Query Boost.

继承并实现自己的Similarity

继承并实现自己的collector

问题四:Lucene中的TooManyClause异常

问题五:Lucene的事务性

问题六:用Lucene构建实时的索引

1、初始化阶段

2、合并索引阶段

3、重新打开硬盘索引的IndexReader

4、替代IndexReader

5、多个索引


 

 

101
18
分享到:
评论
57 楼 摩羯座 2013-04-09  
谢谢,我正需要它,有它我相信毕业设计不愁做不出来
56 楼 20121024 2012-11-22  
thanks very much
55 楼 411240199 2012-08-26  
  楼主真有心 ,下下来慢慢学
54 楼 poorzerg 2012-08-22  
   我最佩服的就是研究源码,还能把原理说出来的人。。
53 楼 awakensandman 2012-06-07  
希望楼主能出书,一定买一本!呵呵
52 楼 awakensandman 2012-06-07  
必须注册账号来感谢一些楼主!
51 楼 wsb1234567890 2012-04-14  
很不错,我帮你推广一下,让更多的人受益
50 楼 leidian666666 2012-03-12  
太好了,这么宝贵的资料
49 楼 546144153 2012-01-22  
LZ 真不好意思  打算点顶呢 结果点成踩了。
48 楼 dsjt 2011-12-27  
太棒了,
美中不足,没有目录啊!
47 楼 tiefanhe 2011-12-16  
46 楼 Julyの记忆 2011-11-05  
非常感谢楼主分享文档,下下来慢慢学习
45 楼 lsjl_java 2011-10-08  
非常精彩!
44 楼 linvar 2011-09-20  

看了几篇楼主的关于lucene的文章后,果断收藏之

另外,提个要求, 能否用zip压缩呢
43 楼 eyesmore 2011-09-15  
老师应该出版纸质的,真是很不错。
42 楼 yuanyu5237 2011-08-15  
楼主,pdf里可不可以把目录设置进去
41 楼 lufam 2011-08-07  
谢谢,实在太有用了
40 楼 youketudou 2011-07-25  
绝对的大牛
39 楼 JavaYog 2011-06-14  
下载不了LZ的PDF文档,能否给俺发一份到邮箱?
javayog@hotmail.com
38 楼 chrhust 2011-05-18  
楼主你太牛了,五体投地啊

相关推荐

    Lucene原理与代码分析完整版

    资源名称:Lucene 原理与代码分析完整版资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Lucene 原理与代码分析完整版.MOBI

    Lucene 原理与代码分析完整版.MOBI

    lucene原理与代码分析完整版

    ### Lucene原理与代码分析概览 #### 一、全文检索基本原理 全文检索是一种能够检索文档中任意词语的信息检索技术。与简单的关键词查询不同,全文检索不仅关注文档标题、元数据,还深入到文档的实际内容中去。这种...

    Lucene 原理与代码分析完整版.pdf

    ### Lucene原理与代码分析概览 #### 一、全文检索的基本原理 **1. 总论** 全文检索系统的核心在于构建高效的索引,并通过这些索引实现快速精确的搜索功能。Lucene作为一款高性能的全文检索库,其设计与实现充分...

    Lucene 原理与代码分析完整版1

    《Lucene原理与代码分析完整版1》这篇文章深入探讨了全文检索的基本原理,以及Lucene这一强大搜索引擎的内部工作机制。全文检索是现代信息技术中的一个重要领域,它为海量数据的高效检索提供了可能。以下是对该文...

    Lucene原理与代码分析完整版以及找的一些资料

    再来看《Lucene原理与代码分析完整版.rar》这份资料,它可能包含对Lucene核心组件的详细解析,例如索引的创建、更新和读取过程。Lucene通过倒排索引实现高效搜索,其中,每个文档被拆分为词汇,每个词汇在索引中对应...

    Lucene 原理与代码分析.pdf

    该文档《Lucene原理与代码分析》深入探讨了Lucene的工作原理及其实现机制,内容涵盖了从理论到实践的各个层面。 在原理篇中,首先对全文检索的基本原理进行了介绍。全文检索是指对文档集合进行建索引,以便快速检索...

    ( Lucene 原理与代码分析完整版.PDF)

    《Lucene原理与代码分析》是一本深入探讨Apache Lucene搜索引擎库的专业书籍。Lucene是Java平台上的一个全文检索库,被广泛应用于各种搜索引擎和信息检索系统中。它提供了高效、可扩展的文本搜索功能,使得开发者...

Global site tag (gtag.js) - Google Analytics