Lucene 学习
jackfirst86
这个作者很懒,什么都没留下…
展开
-
Lucene学习总结之一:全文检索的基本原理
一、总论根据 http://lucene.apache.org/java/docs/index.html 定义: Lucene 是一个高效的,基于Java 的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。 那么什么叫做全文检索呢?这要从我们生活中的数据说起。 我们生活中的数据总体分为两种:结构化数据 和 非结构化数据 。 l转载 2010-05-13 21:14:00 · 585 阅读 · 0 评论 -
Lucene学习总结之五:Lucene段合并(merge)过程分析
<br />一、段合并过程总论<br />IndexWriter中与段合并有关的成员变量有:HashSet<SegmentInfo> mergingSegments = new HashSet<SegmentInfo>(); //保存正在合并的段,以防止合并期间再次选中被合并。MergePolicy mergePolicy = new LogByteSizeMergePolicy(this);//合并策略,也即选取哪些段来进行合并。MergeScheduler mergeScheduler = new Co原创 2011-01-10 15:17:00 · 640 阅读 · 0 评论 -
Lucene学习总结之六:Lucene打分公式的数学推导
<br /><br />在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下。因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数。<br />Lucene的打分公式非常复杂,如下:<br /><br />在推导之前,先逐个介绍每部分的意义:t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hello是不同的Termcoord(q,d):一次搜索可能包含多个搜索词,而一篇文档中也可能转载 2011-01-10 15:18:00 · 368 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(3)
<br />5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理在索引的过程中,DocumentsWriter将词信息(term)存储在CharBlockPool中,将文档号(doc ID),词频(freq)和位置(prox)信息存储在ByteBlockPool中。在ByteBlockPool中,缓存是分块(slice)分配的,块(slice)是分层次的,层次越高,此层的块越大,每一层的块大小事相同的。nextLevelArray原创 2011-01-10 15:13:00 · 304 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(1)
<br /><br /> 对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析。<br />Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:《Annotated Lucene》,好像中文名称叫《Lucene源码剖析》是很不错的。<br />想要真正了解Lucene索引文件过程,最好的办法是跟进代码调试,对着文章看代原创 2011-01-10 14:56:00 · 378 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式(2)
<br />四、具体格式<br />上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。4.1. 正向信息<br />Index –> Segments (segments.gen, segments_N) –> Field(fnm, fdx, fdt) –> Term (tvx, tvd, tvf)<br />上面的层次结构不是转载 2011-01-10 09:52:00 · 436 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(4)
<br />6、关闭IndexWriter对象<br />代码:<br />writer.close();<br />--> IndexWriter.closeInternal(boolean)<br /> --> (1) 将索引信息由内存写入磁盘: flush(waitForMerges, true, true); <br /> --> (2) 进行段合并: mergeScheduler.merge(this);<br />对段的合并将在后面的章节进行讨论,此处仅仅讨论将索引信息由写入原创 2011-01-10 15:13:00 · 321 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(2)
<br />3、将文档加入IndexWriter<br />代码:writer.addDocument(doc); <br />-->IndexWriter.addDocument(Document doc, Analyzer analyzer) <br /> -->doFlush = docWriter.addDocument(doc, analyzer); <br /> --> DocumentsWriter.updateDocument(Document, Analyzer,原创 2011-01-10 14:59:00 · 379 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式(1)
<br /><br />Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。<br />当我们真正进入到Lucene源代码之中的时候,我们会发现:Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。<br />本文详细解读了Apache Lucene - Index File Formats(http://lu转载 2011-01-10 09:49:00 · 466 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(3)
2.3、QueryParser解析查询语句生成查询对象代码为:QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "contents", new StandardAnalyzer(Version.LUCENE_CURRENT));Query query = parser.parse("+(+apple* -boy) (cat* dog) -(eat~ foods)");此过程相对复杂,涉及JavaCC,Quer转载 2011-01-10 15:24:00 · 485 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(2)
<br />二、Lucene搜索详细过程<br />为了解析Lucene对索引文件搜索的过程,预先写入索引了如下几个文件:<br />file01.txt: apple apples cat dog<br />file02.txt: apple boy cat category<br />file03.txt: apply dog eat etc<br />file04.txt: apply cat foods2.1、打开IndexReader指向索引文件夹<br />代码为:<br />IndexRead转载 2011-01-10 15:20:00 · 404 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式(3)
<br /><br />四、具体格式 <br /> <br />4.2. 反向信息 <br />反向信息是索引文件的核心,也即反向索引。<br /> <br />反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List)。<br /> <br />在Lucene中,这两部分是分文件存储的,词典是存储在tii,tis中的,倒排表又包括两部分,一部分是文档号及词频,保存在frq中,一部分是词的位置信息,保存在prx中。<br /> <br />Term Dicti原创 2011-01-10 14:55:00 · 421 阅读 · 0 评论 -
Lucene学习总结之二:Lucene的总体架构
Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。在Lucene in action中,Lucene 的构架和过程如下图,说明Lucene是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。让我们更细一些看Lucene的各组件:被索引的文档用Document对象表示。IndexWriter通过函数addDocument将文档添加到索引转载 2011-01-10 09:46:00 · 397 阅读 · 0 评论 -
当前几个主要的Lucene中文分词器的比较
<br />1. 基本介绍:<br />paoding :Lucene中文分词“庖丁解牛” Paoding Analysis<br />imdict :imdict智能词典所采用的智能中文分词程序<br />mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器<br />ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式<br />2. 开发者及开发活跃度:<br />paoding :qieqie.wang, google code 上最后一次代码提转载 2011-05-18 17:17:00 · 459 阅读 · 0 评论