`

lucence源码学习

阅读更多

 

=======IKAnalyzer ============

 

/**

* 重载Analyzer接口,构造分词组件

*/

@Override

protected TokenStreamComponents createComponents(String fieldName, final Reader in) {

Tokenizer _IKTokenizer = new IKTokenizer(in , this.useSmart());

return new TokenStreamComponents(_IKTokenizer);

}

 

 

=======IKTokenizer==============

/* (non-Javadoc)

* @see org.apache.lucene.analysis.TokenStream#incrementToken()

*/

@Override

public boolean incrementToken() throws IOException {

//清除所有的词元属性

clearAttributes();

Lexeme nextLexeme = _IKImplement.next();

if(nextLexeme != null){

//将Lexeme转成Attributes

//设置词元文本

termAtt.append(nextLexeme.getLexemeText());

//设置词元长度

termAtt.setLength(nextLexeme.getLength());

//设置词元位移

offsetAtt.setOffset(nextLexeme.getBeginPosition(), nextLexeme.getEndPosition());

//记录分词的最后位置

endPosition = nextLexeme.getEndPosition();

//记录词元分类

typeAtt.setType(nextLexeme.getLexemeTypeString());

//返会true告知还有下个词元

return true;

}

//返会false告知词元输出完毕

return false;

}

=======IKSegmenter==============

/**

* 分词,获取下一个词元

* @return Lexeme 词元对象

* @throws IOException

*/

public synchronized Lexeme next()throws IOException{

Lexeme l = null;

while((l = context.getNextLexeme()) == null ){

/*

* 从reader中读取数据,填充buffer

* 如果reader是分次读入buffer的,那么buffer要  进行移位处理

* 移位处理上次读入的但未处理的数据

*/

int available = context.fillBuffer(this.input);

if(available <= 0){

//reader已经读完

context.reset();

return null;

 

}else{

//初始化指针

context.initCursor();

do{

        //遍历子分词器

        for(ISegmenter segmenter : segmenters){

        segmenter.analyze(context);

        }

        //字符缓冲区接近读完,需要读入新的字符

        if(context.needRefillBuffer()){

        break;

        }

   //向前移动指针

}while(context.moveCursor());

//重置子分词器,为下轮循环进行初始化

for(ISegmenter segmenter : segmenters){

segmenter.reset();

}

}

//对分词进行歧义处理

this.arbitrator.process(context, this.cfg.useSmart());

//将分词结果输出到结果集,并处理未切分的单个CJK字符

context.outputToResult();

//记录本次分词的缓冲区位移

context.markBufferOffset();

}

return l;

}

 

 

=====================CJKSegmenter===================

中文分词

分享到:
评论

相关推荐

    Lucene学习源码.rar

    三、Lucene源码学习 源码学习可以帮助我们理解Lucene的工作原理,提升对搜索引擎的理解和使用能力。以下是一些关键类的学习要点: 1. `org.apache.lucene.index.IndexWriter`:负责索引的创建和更新,是与索引交互...

    lucene源码

    Lucene 源码学习重点** - **分析 `Analyzer` 类**:理解如何自定义分词规则,例如通过继承 `Analyzer` 创建自己的分词器。 - **研究 `QueryParser`**:了解查询字符串是如何被解析为 Lucene 查询对象的。 - **...

    lucene源码和程序

    Lucene是Apache软件基金会下的一个项目,它是一个高性能、全文本搜索库,完全用Java编写。作为一款开源的全文检索工具包,...通过学习和使用Lucene源码,你可以更深入地理解全文检索的工作机制,提升自己的开发技能。

    Lucene源码

    **Lucene 源码详解** Lucene 是一个开源的全文检索库,由 Apache 软件基金会开发...通过深入学习和研究Lucene源码,开发者不仅可以掌握其工作原理,还能充分利用这个强大工具构建出高性能、高度定制化的全文搜索引擎。

    一步一步跟我学习Lucene源码之lucene的各种Field

    在深入探讨Lucene Field之前,我们先来了解一下Lucene是什么。Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发,用Java编写。它提供了一个简单但功能强大的API,允许开发者在应用程序中添加搜索功能。...

    lucene源码---官网最新下载

    通过阅读和理解 `lucene-2.9.4` 版本的源码,开发者可以学习到 Lucene 的核心机制,这对于开发自定义搜索引擎或者对全文检索技术有深入了解是非常有价值的。同时,了解老版本的代码也有助于对比新版本的改进和优化,...

    [HeyJava][传智播客]全文检索Lucene源码

    【标签】:“HeyJava”和“传智播客”都是教育品牌,通常提供编程课程,这里的标签表明了这个内容来源于他们的教学资源,特别是关于全文检索的课程,而“Lucene源码”则明确了学习的重点是Lucene的内部工作原理。...

    lucene5.0源码包

    《深入剖析Lucene 5.0源码》 Lucene是一个高性能、全文检索库,它为Java开发者提供了在应用程序中实现全文检索功能的工具。在本文中,我们将深入探讨Lucene 5.0的源码,揭示其核心设计思想与工作原理,帮助读者更好...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    lucene 2.4.1源码在eclipse调试运行通过

    为了调试Lucene源码,我们需要在代码中设置断点,然后启动调试模式。 1. 在需要调试的代码行号前单击,会出现一个红点,表示设置了断点。 2. 右键点击项目,选择“Run As” -&gt; “Java Application”。 3. Eclipse将...

    lucene全文检索案例源码

    通过对“lucene全文检索案例源码”的学习,我们可以理解Lucene如何在实际项目中实现全文检索。从索引构建到搜索执行,每个步骤都至关重要。通过源码的深入研究,有助于我们在实际开发中更好地运用Lucene,提升搜索...

    lucene.net 2.9.1 源码

    三、源码学习要点 1. 分词原理:了解Analyzer的工作流程,包括TokenStream、Tokenizer和Token的交互。 2. 索引构建:研究IndexWriter的使用,以及Segment和Merge策略。 3. 查询解析:探究QueryParser如何将查询字符...

    lucene源码分析1111

    《深入剖析Lucene源码》 Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。作为开源项目,其源码提供了丰富的学习资源,帮助开发者深入了解搜索引擎的工作原理和实现细节。在这个主题中,我们将...

    lucene 华电项目 源码

    总结来说,通过对“lucene 华电项目 源码”的深入研究,我们可以全面了解Lucene在电力行业信息检索中的实际运用,掌握其核心原理,并从中学习到如何优化搜索性能、处理专业词汇以及利用高级功能提升用户体验。...

    Annotated Lucene 中文版 Lucene源码剖析

    通过学习《Annotated Lucene 中文版 Lucene源码剖析》这一资料,可以深入理解Lucene的工作原理及其内部实现细节。 - **强大特性**: - **全文检索**:支持复杂的查询语言,能够快速地在大量文档中查找匹配的文本。...

    lucene5 源码教程

    总结,Lucene 5为开发者提供了强大且灵活的全文检索功能,通过深入学习其源码,尤其是拼音检索和分词器的运用,可以有效地提升搜索质量和用户体验。不断探索和实践,才能充分挖掘Lucene的潜力,为各种信息检索应用...

    Lucene项目的文档和源码

    文件"lucene.155"很可能是一个特定版本的Lucene源码压缩包,版本号可能是1.55。源码阅读是理解任何软件内部工作原理的最好方式,通过研究Lucene的源码,我们可以深入了解其内部的数据结构、算法实现以及优化技巧。...

    孔浩Lucene视频教程_留言项目源码

    《孔浩Lucene视频教程_留言项目源码》是一份珍贵的学习资源,旨在帮助开发者深入理解和实践Apache Lucene这一强大的全文搜索引擎库。孔浩老师,作为业界知名的IT教育专家,以其深入浅出的教学方式,使得复杂的Lucene...

    Lucene.Net2.3源码,最新版

    通过深入学习和理解这些源代码文件,开发者可以更好地掌握 Lucene.Net 的核心功能,如索引构建、查询解析、搜索排序、分词和性能优化。这有助于在实际项目中实现高效、精确的全文搜索引擎。同时,研究源码也能提升对...

    Lucene 4.1 最新版本 源码

    通过研究这些源码和文档,开发者不仅可以了解Lucene的内部工作原理,还能学习到如何利用其提供的API来创建自己的全文搜索引擎。对于希望在搜索领域深入研究或者开发相关应用的人来说,Lucene 4.1的源码是一份宝贵的...

Global site tag (gtag.js) - Google Analytics