Lucene学习总结系列(转载)

转自http://blog.csdn.net/forfuture1978/article/details/5668956

lucene学习总结

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


完整版pdf可在下面的链接下载。


http://download.csdn.net/source/2452992


目录如下:



目录

第一篇:原理篇

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

一、总论

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

三、如何创建索引

第一步:一些要索引的原文档(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结束本次文档添加

5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理

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.3、QueryParser解析查询语句生成查询对象

2.4、搜索查询对象

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

2.4.2、创建Scorer及SumScorer对象树

2.4.3、进行倒排表合并

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

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

第八章:Lucene的查询语法,JavaCC及QueryParser

一、Lucene的查询语法

二、JavaCC介绍

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

2.2、扩展语法分析器

2.3、第二个实例:计算器

三、解析QueryParser.jj

3.1、声明QueryParser类

3.2、声明词法分析器

3.3、声明语法分析器

第九章:Lucene的查询对象

1、BoostingQuery

2、CustomScoreQuery

3、MoreLikeThisQuery

4、MultiTermQuery

4.1、TermRangeQuery

4.2、NumericRangeQuery

5、SpanQuery

5.1、SpanFirstQuery

5.2、SpanNearQuery

5.3、SpanNotQuery

5.4、SpanOrQuery

5.5、FieldMaskingSpanQuery

5.6、PayloadTermQuery及PayloadNearQuery

6、FilteredQuery

6.1、TermsFilter

6.2、BooleanFilter

6.3、DuplicateFilter

6.4、FieldCacheRangeFilter及FieldCacheTermsFilter

6.5、MultiTermQueryWrapperFilter

6.6、QueryWrapperFilter

6.7、SpanFilter

6.7.1、SpanQueryFilter

6.7.2、CachingSpanFilter

第十章:Lucene的分词器Analyzer

1、抽象类Analyzer

2、TokenStream抽象类

3、几个具体的TokenStream

3.1、NumericTokenStream

3.2、SingleTokenTokenStream

4、Tokenizer也是一种TokenStream

4.1、CharTokenizer

4.2、ChineseTokenizer

4.3、KeywordTokenizer

4.4、CJKTokenizer

4.5、SentenceTokenizer

5、TokenFilter也是一种TokenStream

5.1、ChineseFilter

5.2、LengthFilter

5.3、LowerCaseFilter

5.4、NumericPayloadTokenFilter

5.5、PorterStemFilter

5.6、ReverseStringFilter

5.7、SnowballFilter

5.8、TeeSinkTokenFilter

6、不同的Analyzer就是组合不同的Tokenizer和TokenFilter得到最后的TokenStream

6.1、ChineseAnalyzer

6.2、CJKAnalyzer

6.3、PorterStemAnalyzer

6.4、SmartChineseAnalyzer

6.5、SnowballAnalyzer

7、Lucene的标准分词器

7.1、StandardTokenizerImpl.jflex

7.2、StandardTokenizer

7.3、StandardFilter

7.4、StandardAnalyzer

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

8.1、PerFieldAnalyzerWrapper

第三篇:问题篇

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

问题二:stemming和lemmatization的关系

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

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

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

继承并实现自己的Similarity

继承并实现自己的collector

问题四:Lucene中的TooManyClause异常

问题五:Lucene的事务性

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

1、初始化阶段

2、合并索引阶段

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

4、替代IndexReader

5、多个索引

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容