Document对象主要包括以下部分: 此文档的boost,默认为1,大于一说明比一般的文档更加重要,小于一说明更不重要。 一个ArrayList保存此文档所有的域 每一个域包括域名,域值,和一些标志位,和fnm,fdx,fdt中的描述相对应。 阅读全文 »
IndexWriter writer = new IndexWriter(FSDirectory.open(INDEX_DIR), new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED); IndexWriter对象主要包含以下几方面的信息: 阅读全文 »
Lucene 3.0的搜索要经历一个十分复杂的过程,各种信息分散在不同的对象中分析,处理,写入,为了支持多线程,每个线程都创建了一系列类似结构的对象集,为了提高效率,要复用一些对象集,这使得索引过程更加复杂。 阅读全文 »
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer) 和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析。 Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:《Annotated Lucene》,好像 中文名称叫《Lucene源码剖析》是很不错的。 想要真正了解Lucene索引文件过程,最好的办法是跟进代码调试,对着文章看代码,这样不但能够最详细准确 的掌握索引过程(描述都是有偏差的,而代码是不会骗你的),而且还能够学习Lucene的一些优秀的实现,能够 在以后的工作中为我所用,毕竟Lucene是比较优秀的开源项目之一。 由于Lucene已经升级到3.0.0了,本索引过程为Lucene 3.0.0的索引过程。 阅读全文 »
图示为Lucene索引文件的整体结构: 属于整个索引(Index)的segment.gen,segment_N,其保存的是段(segment)的元数据信息,然后分多个segment保存数据信息,同一个segment有相同的前缀文件名。 对于每一个段,包含域信息,词信息,以及其他信息(标准化因子,删除文档)域信息也包括域的元数据信息,在fnm中,域的数据信息,在fdx,fdt中。 词信息是反向信息,包括词典(tis, tii),文档号及词频倒排表(frq),词位置倒排表(prx)。 大家可以通过看源代码,相应的Reader和Writer来了解文件结构,将更为透彻。 阅读全文 »
被删除文档文件(Deleted Document File: .del) Format:在此文件中,Bits和DGaps只能保存其中之一,-1表示保存DGaps,非负值表示保存Bits。 ByteCount:此段中有多少文档,就有多少个bit被保存,但是以byte形式计数,也即Bits的大小应该是byte的倍数。 BitCount:Bits中有多少位被至1,表示此文档已经被删除。 Bits:一个数组的byte,大小为ByteCount,应用时被认为是byte*8个bit。 DGaps:如果删除的文档数量很小,则Bits大部分位为0,很浪费空间。DGaps采用以下的方式来保存稀疏数组:比如第十,十二,三十二个文档被删除,于是第十,十二,三十二位设为1,DGaps也是以byte为单位的,仅保存不为0的byte,如第1个byte,第4个byte,第1个byte十进制为20,第4个byte十进制为1。于是保存成DGaps,第1个byte,位置1用不定长正整数保存,值为20用二进制保存,第2个byte,位置4用不定长正整数保存,用差值为3,值为1用二进制保存,二进制数据不用差值表示。 阅读全文 »
为什么会有标准化因子呢?从第一章中的描述,我们知道,在搜索过程中,搜索出的文档要按与查询语句的相关性排序,相关性大的打分(score)高,从而排在前面。相关性打分(score)使用向量空间模型(Vector Space Model),在计算相关性之前,要计算Term Weight,也即某Term相对于某Document的重要性。在计算Term Weight时,主要有两个影响因素,一个是此Term在此文档中出现的次数,一个是此Term的普通程度。显然此Term在此文档中出现的次数越多,此Term在此文档中越重要。 阅读全文 »
lucene词位置信息也是倒排表,也是以跳跃表形式存在的。 阅读全文 »
偶尔翻到豆瓣里一篇对中国屌丝的批评,突然想到当年美国那个垮掉的一代,吸毒,淫乱,绝望的生存,而如今我们苦逼的80后自诩为屌丝的时候,也不想想每一个堕落的时代还是有牛逼的人存在,中国的大学,绝大部分在逃课,生殖冲动,暗无天日的游戏,苦逼学习的几乎是不入群,悲观消极的情绪像哈欠一样传染着每一个容易被感染的苦逼青年。毕业后即失业,人生没有方向,更无从理想了,傻逼的政府不知道怎么搞教育,造就了一群乌合之众的国家,纵使在这样的环境下,还是有人为理想奋斗着,每一天在充实,相信总有一天会有自己出头的。 我不吸毒,不喝酒,不打游戏,不搞乌烟瘴气的社会关系,在苦逼的it路上挨踢,虽然天资和能力都进不了微软google之类的公司,每天在自己既定的方向一步步前进。做着自己喜欢做的事情,认真做好每一件事情。摆脱虚伪的自我,既敢为了感情牺牲失业,又要做到掌握自己人生的方向,拒绝屌丝的自嘲,拒绝屌丝的人生。 当明白一切时,秋叶已泛黄,在收获的季节里播种,是期望下一个春天还是奢望冬天来临时那无几的颗实,纵使如此,朝闻道夕可死。 阅读全文 »
文档号及词频文件里面保存的是倒排表,是以跳跃表形式存在的。 阅读全文 »