`
wangwanbao
  • 浏览: 20584 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lucene中Analyzer处理过程详解

阅读更多

最近做项目中应用到了Lucene做搜索应用,于是顺便学习它的源代码。下面就将学习到的“Lucene分析器分析过程”与大家分享!限于水平,错误难免。请大家不吝赐教。让拍砖来的更猛烈些,文章为原创,参照Lucen in Action中

部分内容,如需要转载,请与作者联系,或标明来源。谢谢!


一、先看看编写的Demo及运行效果,总览一下。

private static Log log = LogFactory.getLog(AnalyzerDemo.class);
	public static void main(String[] args) throws IOException{
		Analyzer analyzer = new SimpleAnalyzer();
		TokenStream stream = analyzer.reusableTokenStream(null, new StringReader("Programminged is fun,by the way,do you like dog?"));
		while(true){
			Token token = stream.next();
			if(null == token){
				log.info("完毕!");
				break;
			}
			log.info(new String(token.termBuffer()) + " 起始位置:" + token.startOffset() + " 结束位置:" + token.endOffset());
		}
	}


   程序运行后控制台效果:

0    [main] INFO  test.lucene.AnalyzerDemo  - programminged 起始位置:0 结束位置:13
16   [main] INFO  test.lucene.AnalyzerDemo  - is 起始位置:14 结束位置:16
16   [main] INFO  test.lucene.AnalyzerDemo  - fun 起始位置:17 结束位置:20
16   [main] INFO  test.lucene.AnalyzerDemo  - by 起始位置:21 结束位置:23
16   [main] INFO  test.lucene.AnalyzerDemo  - the 起始位置:24 结束位置:27
16   [main] INFO  test.lucene.AnalyzerDemo  - way 起始位置:28 结束位置:31
16   [main] INFO  test.lucene.AnalyzerDemo  - do 起始位置:32 结束位置:34
16   [main] INFO  test.lucene.AnalyzerDemo  - you 起始位置:35 结束位置:38
16   [main] INFO  test.lucene.AnalyzerDemo  - like 起始位置:39 结束位置:43
16   [main] INFO  test.lucene.AnalyzerDemo  - dog 起始位置:44 结束位置:47
16   [main] INFO  test.lucene.AnalyzerDemo  - 完毕!


  以上代码中,使用SimpleAnalyzer进行分析。它内置使用LowerCaseTokenizer 。至于分析的结果,我将在下文结合Lucene源代码详细描述。



二、让我们看一下UML图,UML图画的可能比较粗糙一些


这个图是SimpleAnalyzer的架构图,旁边给了说明,就不再赘述了。值的注意的是,simpleAnalyzer两个方法,返回值都是TokenStream,这个类就是我刚才提到的LowerCaseTokenizer的超类。

为了方便大家观看它的结构。下面将给出它的架构图,如下:


三、分析处理过程

      上述代码中,我们构建了一个LowerCaseTokenizer,通过构造方法,将StringReader传递到Tokeinzer的 protected Reader input 中。

       接着调用TokenStrem的next()方法,这个方法主要是构建Token的,在这个方法内部,它调用CharTokenizer的重载方法,下面主要讲讲Chartokenizer.next(Token token)

       1)程序给出了一个死循环,while(true),在这个循环内部,逐个调字串分析,调用抽象方法isTokenChar,如果返回false,则break循环。我们上例中,碰到“空格”后就跳出。

       2)如果是字符串,即时isTokenChar返回为真的时候,记录下这个字串到char[] buffer中。

       3)char[] buffer在初始化时,设置长度为10,如果超出10,比如我们的"Programminged"(为了超出10个字串,说明问题,构建了一个错误的单词,见笑了。)则扩充长度*2

          这段代码在Token中,size *= 2;
                                        char[] newBuffer = new char[size];
                                        System.arraycopy(termBuffer, 0, newBuffer, 0, termBuffer.length);

       4)包装Token,内容不但有每个Token的内容,还有它的起始、结束位置。谓之原数据。这将在高亮显示时使用。


四、Analyzer将输入源进行分析,通过DocumentsWriter进行写索引。

      见代码:

            // Tokenize field and add to postingTable
            stream = analyzer.reusableTokenStream(fieldInfo.name, reader);

     上述是Lucene自带的SimpleAnalyzer分析处理过程,我们可以扩充Analyzer 类,扩建自已的中文分词处理器。

 

4
1
分享到:
评论
2 楼 wangwanbao 2009-02-13  
1 楼 terrychan 2009-02-13  
写的好,顶顶

相关推荐

    IKAnalyzer 支持高版本最新Lucene 5.x、6.x、7.x

    1. **IKAnalyzer详解**: - IKAnalyzer最初的设计目标是提供一个灵活且可扩展的中文分词器。它支持词典动态加载,可以方便地添加或更新词库。 - 分词器的核心部分包括:词典管理、动态词典加载、基于Aho-Corasick...

    Lucene5.21+IkAnalyzer

    《Lucene5.21与IkAnalyzer2012_V5入门详解》 在信息技术领域,数据检索和搜索引擎是至关重要的部分,而Lucene和IkAnalyzer则是其中的两大利器。本文将详细介绍如何使用Lucene 5.21版本结合IkAnalyzer 2012_V5进行...

    elasticsearch-analysis-ik,ik分析插件将lucene ik analyzer集成到elasticsearch中,支持自定义字典。.zip

    IK Analyzer 是由国人开发的一款针对中文的 Lucene 分词器,其设计目标是为了解决 Lucene 在处理中文时的不足。IK 支持多种分词模式,包括精确模式、全模式、关键词模式等,可以满足不同场景下的分词需求。此外,IK ...

    Lucene 常用功能介绍视频详解

    Lucene的`Analyzer`类是处理文本的关键组件,它负责将输入的文本分解为可搜索的词元。默认的`StandardAnalyzer`适用于大多数英文文本,但对于其他语言或特定需求,可以自定义分析器。分析器包括分词器(Tokenizer)...

    lucene 所有jar包 包含IKAnalyzer分词器

    《Lucene分词技术与IKAnalyzer详解》 在信息技术领域,搜索引擎是不可或缺的一部分,而Lucene作为Apache软件基金会的一个开放源代码项目,是Java语言开发的全文检索引擎库,为构建高效、可扩展的信息检索应用提供了...

    lucene第一步---5.中文分词IKAnalyzer和高亮highlighter的使用

    3. **IKAnalyzer详解** IKAnalyzer采用了字典驱动的分词策略,它的字典包含了大量的常用词汇,并且支持动态扩展。此外,IKAnalyzer还考虑了词语的歧义问题,通过智能切分算法来尽可能准确地划分词语。 4. **高亮器...

    lucene.NET 中文分词

    中文分词是将连续的汉字序列切分成具有语义的词语的过程,是自然语言处理(NLP)中的基础步骤。在Lucene.NET中,为了支持中文分词,通常需要结合第三方分词器,如IK Analyzer、HanLP、jieba.NET等。这些分词器具备...

    lucene搜索过程代码详解

    《Lucene搜索过程深度解析》 Lucene,作为一款强大的全文搜索引擎库,其搜索机制是其核心功能之一。本文将详细剖析Lucene的搜索实现过程,通过代码解析,帮助读者深入理解其工作原理。 首先,搜索过程始于打开并...

    lucene中文分词工具包

    **IKAnalyzer详解** IKAnalyzer的设计目标是易于使用和高度可扩展。它采用了模块化的设计,使得用户可以根据自己的需求定制分词策略。以下是IKAnalyzer分词过程的五个主要部分: 1. **词典加载**:词典是分词的...

    Lucene分词与查询详解

    **Lucene分词与查询详解** Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。它提供了一套强大的API,用于索引文本数据,并执行复杂的查询操作。在深入理解Lucene的分词与查询机制之前,我们...

    Lucene 实时搜索视频详解

    在"Lucene 实时搜索视频详解"的课程中,我们将深入探讨如何利用 Lucene 实现高效且实时的搜索功能。 一、Lucene 基础 1. **索引过程**:Lucene 的核心概念之一是建立索引,将原始文本数据转化为可快速查询的结构。...

    Lucene 概述视频详解

    3. **搜索**:用户输入查询后,Lucene会使用同样的Analyzer处理查询字符串,生成查询关键词,然后在倒排索引中查找匹配的文档。 4. **结果排序**:找到匹配的文档后,Lucene会根据评分机制(如TF-IDF)对结果进行...

    lucene搜索引擎配置详解

    在Lucene中,可以设置分词器(Analyzer)来处理文本,如中文分词器`ICUAnalyzer`或`SmartChineseAnalyzer`,确保正确切分中文词汇。 ### 分词与分析 分词是将文本分解成有意义的单词或短语的过程。对于中文,由于...

    基于Lucene的Lucene

    **基于Lucene的文件检索系统详解** Lucene是一款开源的全文搜索引擎库,由Apache软件基金会维护,被广泛应用于各种搜索引擎的开发。它提供了一个高效、可扩展的框架,用于索引和搜索大量文本数据。本篇文章将深入...

    lucene中文分词

    《Lucene中文分词技术详解》 在信息检索和自然语言处理领域,中文分词是至关重要的一步。Lucene,作为一个强大的全文搜索引擎库,对于处理中文文档,分词的准确性和效率直接影响到搜索效果。本文将围绕“lucene中文...

    支持lucene的词典机械中文分词

    在Lucene中,分词器通常与索引构建过程相结合,通过预处理和并行化处理来减少在线查询时的负担。 总的来说,支持Lucene的词典机械中文分词方法结合了反向分词策略和特定的数字、英文处理机制,能够有效地处理中文...

    Lucene6.6.2API示例

    在Lucene 6.6.2中集成IKAnalyzer,首先需要在项目中引入IKAnalyzer-6.5.0.jar库。然后,在创建Analyzer时指定使用IKAnalyzer,例如: ```java Analyzer analyzer = new IKAnalyzer(); ``` 接着,在创建IndexWriter...

    arirang.lucene-analyzer-5.0.0:Lucene 5.0.0 Arirang Hangul Stemetic Analyzer

    2. 创建Analyzer实例:在Lucene的索引和查询过程中,替换默认的Analyzer为阿里郎分析器。 3. 配置和定制:根据需求,可以调整分析器的参数,如是否忽略某些字符或词组。 4. 索引和搜索:使用定制的Analyzer对韩语...

    Lucene.net中文帮助文档

    **Lucene.NET中文帮助文档详解** Lucene.NET是一款开源全文搜索引擎库,它是Apache Lucene项目在.NET框架下的实现。这个库提供了高级的信息检索服务,包括文本分析、索引和搜索功能,广泛应用于各种需要高效搜索...

Global site tag (gtag.js) - Google Analytics