Lucene 学习总结
文章平均质量分 91
forfuture1978
这个作者很懒,什么都没留下…
展开
-
Lucene学习总结之五:Lucene段合并(merge)过程分析
一、段合并过程总论IndexWriter中与段合并有关的成员变量有: HashSet<SegmentInfo> mergingSegments = new HashSet<SegmentInfo>(); //保存正在合并的段,以防止合并期间再次选中被合并。 MergePolicy mergePolicy = new LogByteSizeMergePoli...原创 2010-03-06 11:35:19 · 213 阅读 · 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:25:58 · 115 阅读 · 0 评论 -
Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser
Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)http://forfuture1978.iteye.com/blog/661678Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(2)http://forfuture1978.iteye.com/blog/661680此系列相关文章...2010-05-08 13:41:49 · 128 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(1)
对于Lucene的索引过程,除了将词(Term)写入倒排表并最终写入Lucene的索引文件外,还包括分词(Analyzer)和合并段(merge segments)的过程,本次不包括这两部分,将在以后的文章中进行分析。Lucene的索引过程,很多的博客,文章都有介绍,推荐大家上网搜一篇文章:《Annotated Lucene》,好像中文名称叫《Lucene源码剖析》是很不错的。想要真正了解...原创 2010-02-03 22:47:42 · 156 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(2)
3、将文档加入IndexWriter代码:writer.addDocument(doc); -->IndexWriter.addDocument(Document doc, Analyzer analyzer) -->doFlush = docWriter.addDocument(doc, analyzer); --> DocumentsW...原创 2010-02-03 22:50:29 · 119 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(3)
5、DocumentsWriter对CharBlockPool,ByteBlockPool,IntBlockPool的缓存管理在索引的过程中,DocumentsWriter将词信息(term)存储在CharBlockPool中,将文档号(doc ID),词频(freq)和位置(prox)信息存储在ByteBlockPool中。 在ByteBlockPool中,缓存是分块(slice)分配...原创 2010-02-03 23:00:31 · 120 阅读 · 0 评论 -
Lucene学习总结之四:Lucene索引过程分析(4)
6、关闭IndexWriter对象代码:writer.close(); --> IndexWriter.closeInternal(boolean) --> (1) 将索引信息由内存写入磁盘: flush(waitForMerges, true, true); --> (2) 进行段合并: mergeScheduler.merge(t...原创 2010-02-03 23:01:55 · 111 阅读 · 0 评论 -
Lucene 3.0 原理与代码分析
本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。本系列文章尚在撰写之中,将会有分词器,段合并,QueryParser,查询语句与查...2010-02-24 11:04:43 · 91 阅读 · 0 评论 -
Lucene学习总结之九:Lucene的查询对象(1)
Lucene除了支持查询语法以外,还可以自己构造查询对象进行搜索。从上一节的Lucene的语法一章可以知道,能与查询语句对应的查询对象有:BooleanQuery,FuzzyQuery,MatchAllDocsQuery,MultiTermQuery,MultiPhraseQuery,PhraseQuery,PrefixQuery,TermRangeQuery,TermQuery,Wil...原创 2010-05-19 02:34:40 · 129 阅读 · 0 评论 -
Lucene学习总结之九:Lucene的查询对象(2)
5、SpanQuery 所谓SpanQuery也即在查询过程中需要考虑进Term的位置信息的查询对象。SpanQuery中最基本的是SpanTermQuery,其只包含一个Term,与TermQuery所不同的是,其提供一个函数来得到位置信息:public Spans getSpans(final IndexReader reader) throws IOException...原创 2010-05-19 02:36:03 · 120 阅读 · 0 评论 -
Lucene学习总结之九:Lucene的查询对象(3)
6、FilteredQuery FilteredQuery包含两个成员变量:Query query:查询对象 Filter filter:其有一个函数DocIdSet getDocIdSet(IndexReader reader) 得到一个文档号集合,结果文档必须出自此文档集合,注此处的过滤器所包含的文档号并不是要过滤掉的文档号,而是过滤后需要的文档号。 Filt...原创 2010-05-19 02:37:15 · 109 阅读 · 0 评论 -
Lucene学习总结之九:Lucene的查询对象
Lucene学习总结之九:Lucene的查询对象(1)http://forfuture1978.iteye.com/blog/669444Lucene学习总结之九:Lucene的查询对象(2)http://forfuture1978.iteye.com/blog/669445Lucene学习总结之九:Lucene的查询对象(3)http://forfutur...2010-05-19 02:39:49 · 107 阅读 · 0 评论 -
Lucene学习总结之十:Lucene的分词器Analyzer
1、抽象类Analyzer其主要包含两个接口,用于生成TokenStream:TokenStream tokenStream(String fieldName, Reader reader); TokenStream reusableTokenStream(String fieldName, Reader reader) ; 所谓TokenStream,后面我们会...2010-06-06 22:13:31 · 276 阅读 · 0 评论 -
Lucene 原理与代码分析完整版
Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新。 完整版pdf可由以附件下载。 目录如下: 目录目录第一篇:原理篇第一章:全文检索的基本原理一、总论二、索引里面究竟存些什么三、如何创建索引第一步:一些要索引的原文档(Document)。第二步:将原文档传给分次组件(Tokenizer)。...2010-06-13 01:30:17 · 355 阅读 · 0 评论 -
Lucene应用开发揭秘
Lucene应用开发揭秘 华章培训网地址:http://www.hztraining.com/bbs/showtopic-1954.aspxChinaPub地址:http://product.china-pub.com/3502099&ref=xiliegoumai 注意事项:由于本人是首次录制此类视频,不完美之处敬请谅解此系列课程主要包涵三大部分,一是搜索引...原创 2011-09-25 22:13:05 · 313 阅读 · 0 评论 -
Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)
一、Lucene的查询语法Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html(1) 语法关键字+ - && || ! ( ) { } [ ] ^ " ~ * ? : \如果所要查询的查询词中本身包含关键字,则需要用\进行转义(2) 查询词(Term)Luc...2010-05-08 00:20:35 · 185 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析
本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。本系列文章尚在撰写之中,将会有分词器,QueryParser,查询语句与查询对象等...2010-04-05 14:52:11 · 89 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析
本系列文章将详细描述几乎最新版本的Lucene的基本原理和代码分析。其中总体架构和索引文件格式是Lucene 2.9的,索引过程分析是Lucene 3.0的。鉴于索引文件格式没有太大变化,因而原文没有更新,原理和架构的文章中引用了前辈的一些图,可能属于早期的Lucene,但不影响对原理和架构的理解。本系列文章尚在撰写之中,将会有分词器,QueryParser,查询语句与查询对象等...2010-04-04 22:54:21 · 117 阅读 · 0 评论 -
Lucene学习总结之六:Lucene打分公式的数学推导
在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下。因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数。Lucene的打分公式非常复杂,如下: 在推导之前,先逐个介绍每部分的意义:t:Term,这里的Term是指包含域信息的Term,也即title:hello和content:hel...原创 2010-03-07 00:41:39 · 100 阅读 · 0 评论 -
Lucene学习总结之一:全文检索的基本原理
本文csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/10/22/4711308.aspx一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做...2009-12-11 22:09:14 · 511 阅读 · 0 评论 -
Lucene学习总结之二:Lucene的总体架构
本文csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/10/30/4745802.aspx Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的...2009-12-11 23:22:47 · 189 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式 (1)
本文csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/12/10/4981893.aspx Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。当我们真正进入到Lucene源代码之中的时候,我们会发现:Lucene的索引过程,就是按照全文检索的基本过程,将倒...2009-12-11 23:41:22 · 161 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式 (2)
本文在csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/12/10/4976793.aspx四、具体格式上面曾经交代过,Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息,也包括了从Term到Document映射的反向信息,还有其他一些Lucene特有的信息。下面对这三种信息一一...2009-12-12 00:08:04 · 193 阅读 · 0 评论 -
Lucene学习总结之三:Lucene的索引文件格式 (3)
本文在csdn中的位置http://blog.csdn.net/forfuture1978/archive/2009/12/10/4976794.aspx四、具体格式4.2. 反向信息反向信息是索引文件的核心,也即反向索引。反向索引包括两部分,左面是词典(Term Dictionary),右面是倒排表(Posting List)。在Lucene中,这两部分是分文件存储的,...原创 2009-12-12 00:26:00 · 225 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(1)
一、Lucene搜索过程总论搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程。其可用如下图示: 总共包括以下几个过程:IndexReader打开索引文件,读取并打开指向索引文件的流。 用户输入查询语句 将查询语句转换为查询对象Query对象树 构造Weight对象树,用于计算词的权重...2010-04-04 20:07:50 · 112 阅读 · 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 20:10:57 · 117 阅读 · 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* -b...2010-04-04 20:19:45 · 140 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(4)
2.4、搜索查询对象 2.4.1.2、创建Weight对象树BooleanQuery.createWeight(Searcher) 最终返回return new BooleanWeight(searcher),BooleanWeight构造函数的具体实现如下: public BooleanWeight(Searcher searcher) { this.simila...2010-04-04 20:46:23 · 149 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(5)
2.4、搜索查询对象 2.4.2、创建Scorer及SumScorer对象树当创建完Weight对象树的时候,调用IndexSearcher.search(Weight, Filter, int),代码如下://(a)创建文档号收集器TopScoreDocCollector collector = TopScoreDocCollector.create(nD...2010-04-04 21:26:48 · 162 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(6)
2.4、搜索查询对象 2.4.3、进行倒排表合并在得到了Scorer对象树以及SumScorer对象树后,便是倒排表的合并以及打分计算的过程。合并倒排表在此节中进行分析,而Scorer对象树来进行打分的计算则在下一节分析。BooleanScorer2.score(Collector) 代码如下:public void score(Collector collector...2010-04-04 22:20:27 · 124 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(7)
2.4、搜索查询对象 2.4.3.2、并集DisjunctionSumScorer(A OR B)DisjunctionSumScorer中有成员变量List<Scorer> subScorers,是一个Scorer的链表,每一项代表一个倒排表,DisjunctionSumScorer就是对这些倒排表取并集,然后将并集中的文档号在nextDoc()函数中依次返回。...2010-04-04 22:39:47 · 211 阅读 · 0 评论 -
Lucene学习总结之七:Lucene搜索过程解析(8)
2.4、搜索查询对象 2.4.4、收集文档结果集合及计算打分在函数IndexSearcher.search(Weight, Filter, int) 中,有如下代码:TopScoreDocCollector collector = TopScoreDocCollector.create(nDocs, !weight.scoresDocsOutOfOrder());sear...2010-04-04 22:43:38 · 132 阅读 · 0 评论 -
LinkedIn公司实现的实时搜索引擎Zoie
一、总体架构Zoie是linkedin公司基于Lucene实现的实时搜索引擎系统,按照其官方wiki的描述为:http://snaprojects.jira.com/wiki/display/ZOIE/OverviewZoie is a realtime indexing and search system, and as such needs to have relatively...2010-11-29 21:19:49 · 154 阅读 · 0 评论