Lucene学习总结
文章平均质量分 80
forfuture1978
这个作者很懒,什么都没留下…
展开
-
Lucene学习总结之一:全文检索的基本原理
一、总论根据http://lucene.apache.org/java/docs/index.html 定义:Lucene 是一个高效的,基于Java 的全文检索库。 所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据 和非结构化数据 。结构化数据:原创 2009-10-22 01:28:00 · 65522 阅读 · 92 评论 -
Lucene学习总结之七:Lucene搜索过程解析(6)
2.4、搜索查询对象 2.4.4、收集文档结果集合及计算打分在函数IndexSearcher.search(Weight, Filter, int) 中,有如下代码:TopScoreDocCollector collector = TopScoreDocCollector.create(nDocs, !weight.scoresDocsOutOfOrder());s原创 2010-04-04 19:00:00 · 2650 阅读 · 2 评论 -
Lucene学习总结之七:Lucene搜索过程解析(1)
一、Lucene搜索过程总论搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程。其可用如下图示: 总共包括以下几个过程:IndexReader打开索引文件,读取并打开指向索引文件的流。 用户输入查询语句 将查询语句转换为查询对象Query对象树 构造Weight对象树,用于计算词的权重T原创 2010-04-04 18:46:00 · 3411 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(2)
二、Lucene搜索详细过程为了解析Lucene对索引文件搜索的过程,预先写入索引了如下几个文件:file01.txt: apple apples cat dogfile02.txt: apple boy cat categoryfile03.txt: apply dog eat etcfile04.txt: apply cat foods2.1、打开IndexReader原创 2010-04-04 18:48:00 · 2950 阅读 · 0 评论 -
Lucene搜索过程解析
本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。本系列文章尚在撰写之中,将会有分词器,QueryParser,查询语句与查询对原创 2010-04-06 21:05:00 · 1902 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(3)
2.3、QueryParser解析查询语句生成查询对象代码为:QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "contents", new StandardAnalyzer(Version.LUCENE_CURRENT)); Query query = parser.parse("+(+appl原创 2010-04-04 18:50:00 · 2611 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(5)
2.4、搜索查询对象 2.4.3、进行倒排表合并在得到了Scorer对象树以及SumScorer对象树后,便是倒排表的合并以及打分计算的过程。合并倒排表在此节中进行分析,而Scorer对象树来进行打分的计算则在下一节分析。BooleanScorer2.score(Collector) 代码如下:public void score(Collector c原创 2010-04-04 18:57:00 · 2375 阅读 · 1 评论 -
Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)
一、Lucene的查询语法Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html(1) 语法关键字+ - && || ! ( ) { } [ ] ^ " ~ * ? : /如果所要查询的查询词中本身包含关键字,则需要用/进行转义(2) 查询词(Term)Lucene支持两种查询词,原创 2010-05-08 00:37:00 · 2358 阅读 · 0 评论 -
Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(2)
三、解析QueryParser.jj 3.1、声明QueryParser类在QueryParser.jj文件中,PARSER_BEGIN(QueryParser)和PARSER_END(QueryParser)之间,定义了QueryParser类。其中最重要的一个函数是public Query parse(String query)函数,也即我们解析Lucene查询语法的时候调用的原创 2010-05-08 00:40:00 · 2074 阅读 · 0 评论 -
Lucene 原理与代码分析完整版
<br /> <br />Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新。<br /> <br />完整版pdf可在下面的链接下载。<br /> <br />http://download.csdn.net/source/2452992<br /> <br />目录如下:<br /> <br /> <br />目录<br />第一篇:原理篇<br />第一章:全文检索的基本原理<br />一、总论<br />二、索引里面究竟存些什么<br />三、如何创建索引<br />第一原创 2010-06-13 13:29:00 · 9660 阅读 · 19 评论 -
Lucene学习总结之七:Lucene搜索过程解析(4)
2.4、搜索查询对象 2.4.1.2、创建Weight对象树BooleanQuery.createWeight(Searcher) 最终返回return new BooleanWeight(searcher),BooleanWeight构造函数的具体实现如下:public BooleanWeight(Searcher searcher) { this.s原创 2010-04-04 18:52:00 · 2512 阅读 · 0 评论 -
Lucene学习总结之六:Lucene打分公式的数学推导
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下。因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数。Lucene的打分公式非常复杂,如下: 在推导之前,先逐个介绍每部分的意义:t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hello是不同原创 2010-03-07 00:52:00 · 3686 阅读 · 4 评论 -
Lucene学习总结之五:Lucene段合并(merge)过程分析
一、段合并过程总论IndexWriter中与段合并有关的成员变量有:HashSet mergingSegments = new HashSet(); //保存正在合并的段,以防止合并期间再次选中被合并。 MergePolicy mergePolicy = new LogByteSizeMergePolicy(this);//合并策略,也即选取哪些段来进行合并。原创 2010-03-06 01:31:00 · 7368 阅读 · 1 评论 -
Lucene学习总结之二:Lucene的总体架构
Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包原创 2009-10-30 01:09:00 · 17472 阅读 · 12 评论 -
Lucene学习总结之四:Lucene索引过程分析(3)
5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理在索引的过程中,DocumentsWriter将词信息(term)存储在CharBlockPool中,将文档号(doc ID),词频(freq)和位置(prox)信息存储在ByteBlockPool中。 在ByteBlockPool中,缓存是分块(slice)分原创 2010-02-02 02:08:00 · 2393 阅读 · 1 评论 -
Lucene学习总结之四:Lucene索引过程分析(4)
6、关闭IndexWriter对象代码:writer.close(); --> IndexWriter.closeInternal(boolean) --> (1) 将索引信息由内存写入磁盘: flush(waitForMerges, true, true); --> (2) 进行段合并: mergeScheduler.merge(this)原创 2010-02-02 02:09:00 · 2116 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(1)
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析。Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:《Annotated Lucene》,好像中文名称叫《Lucene源码剖析》是很不错的。想要真正了解原创 2010-02-02 02:04:00 · 3656 阅读 · 1 评论 -
Lucene学习总结之四:Lucene索引过程分析(2)
3、将文档加入IndexWriter代码:writer.addDocument(doc); -->IndexWriter.addDocument(Document doc, Analyzer analyzer) -->doFlush = docWriter.addDocument(doc, analyzer); --> DocumentsWrite原创 2010-02-02 02:06:00 · 2824 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式(2)
四、具体格式上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。4.1. 正向信息Index –> Segments (segments.gen, segments_N) –> Field(fn原创 2009-12-10 03:54:00 · 7139 阅读 · 5 评论 -
Lucene学习总结之三:Lucene的索引文件格式(3)
四、具体格式4.2. 反向信息反向信息是索引文件的核心,也即反向索引。反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List)。在Lucene中,这两部分是分文件存储的,词典是存储在tii,tis中的,倒排表又包括两部分,一部分是文档号及词频,保存在frq中,一部分是词的位置信息,保存在prx中。Ter原创 2009-12-10 03:56:00 · 5489 阅读 · 5 评论 -
Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。当我们真正进入到Lucene源代码之中的时候,我们会发现:Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 本文详细解原创 2009-12-10 20:49:00 · 10203 阅读 · 8 评论 -
Lucene 3.0 原理与代码分析
本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。本系列文章尚在撰写之中,将会有分词器,段合并,QueryParser,查询语句与查询对象原创 2010-02-22 23:39:00 · 2180 阅读 · 2 评论 -
Lucene应用开发揭秘上线了
Lucene应用开发揭秘华章培训网地址:http://www.hztraining.com/bbs/showtopic-1954.aspxChinaPub地址:http://product.china-pub.com/3502099&ref=xiliegoumai原创 2011-09-09 23:54:09 · 5828 阅读 · 2 评论