LUCENE3.0 自学吧 5 TokenStream

LUCENE3.0 自学吧 5 TokenStream
研究Lucene分析器的实现。
Analyzer抽象类
所有的分析器的实现,都是继承自抽象类Analyzer,它的源代码如下所示:
packageorg.apache.lucene.analysis;importjava.io.Reader;publicabstractclassAnalyzer{//通过Field的名称,和一个Reader对象,创建一个分词流,该方法是抽象方法publicabstractTokenStrea

大家好,又见面了,我是你们的朋友全栈君。

研究Lucene分析器的实现。

Analyzer抽象类

所有的分析器的实现,都是继承自抽象类Analyzer ,它的源代码如下所示:

这里,tokenStream()的作用非常大。它返回一个TokenStream类对象 ,这个TokenStream类对象应该是已经经过分词器处理过的 。

与Analyzer抽象类有关的其他类

TokenStream也是一个抽象类:

TokenStream类的方法表明,它最基本的是对分词流的状态进行管理。具体地,它如何对分析的对象处理,应该从继承该抽象类的子类的构造来看。

在包org.apache.lucene.analysis下可以看到有两个TokenStream的子类 :Tokenizer 和TokenFilter ,它们还都是抽象类 ,从这两个抽象类可以看出,是在TokenStream的基础上,按照功能进行分类实现:处理分词、过滤分词 。

Tokenizer类在Lucene中定义如下所示:

接着,看看TokenFilter类的实现,TokenFilter类在Lucene中定义如下 所示:

TokenFilter是可以嵌套Tokenizer的:

当一个Tokenizer对象不为null时,如果需要对其进行过滤,可以构造一个TokenFilter来对分词的词条进行过滤。

同样地,在包org.apache.lucene.analysis下可以找到继承自Tokenizer类的具体实现类。

很明显了,实现Tokenizer类的具体类应该是分词的核心所在 了。

对指定文本建立索引之前,应该(1) 先构造Field对象 ,在此基础上(2) 再构造Document对象 ,然后(3) 添加到IndexWriter中进行分析处理 。在(4) 这个分析处理过程中,包含对其进行分词(Tokenizer) ,而(5) 经过分词处理以后 ,返回的是一个Token 对象 (经过分词器得到的词条),它可能是Field中的一个Term的一部分 。

看一看Token类都定义了哪些内容:

 

最后 一个关系图 不太会画,里边的所有关系均为继承…

LUCENE3.0 自学吧 5 TokenStream

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163104.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nessus扫描工具的使用_结合扫描器任务

    nessus扫描工具的使用_结合扫描器任务目录NessusScansSettings一个基本扫描的建立自定义扫描策略Nessus的高级扫描方法NessusNessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥控,进行系统的漏洞分析扫描。对应渗透测试人…

    2022年10月19日
  • tomcat配置虚拟主机

    tomcat配置虚拟主机

    2021年11月16日
  • 漫谈原生JS添加元素的两种方法

    漫谈原生JS添加元素的两种方法漫谈原生JS添加元素常规方法常规方法是首先创建一个目标元素并赋值给某个变量,但是元素里面内容较多,需要innerHTML赋值,将含有内容的变量赋值给目标元素的变量,最后,将这个目标元素的变量通过appendChild把节点放到指定位置。varli=document.createElement(“li”);varspan=document.createElement(“span”);li.appendChild(span);varelement=document.querySe

    2022年6月22日
  • oracle 禁用asmm,oracle三对内存参数间关系之3AMM启动和关闭两种情况下ASMM机制涉…[通俗易懂]

    oracle 禁用asmm,oracle三对内存参数间关系之3AMM启动和关闭两种情况下ASMM机制涉…[通俗易懂]ASMM机制涉及的一对参数为:SGA_TARGET和SGA_MAX_SIZE。SGA_TARGETDefaultvalue0(SGAautotuningisdisabledforDEFERREDmodeautotuningrequests,butallowedforIMMEDIATEmodeautotuningrequests)ModifiableA…

    2022年5月3日
  • Photoshop CC 2019选区的基本操作(快捷键)

    Photoshop CC 2019选区的基本操作(快捷键)1.全选与反选ctrl+A2.取消选择和重新选择取消:ctrl+D重新选择:ctrl+shift+D3.运算选区shift+拖动鼠标,添加到选区alt+拖动鼠标,从选区减去alt+shift+拖动,与选区交叉4.移动选区鼠标到选区边缘即可移动…

    2022年6月16日
  • java四舍五入取整算法(小数四舍五入取整公式)

    简介Math类中提供了5个与取整相关的函数,如下所示:staticdoubleceil(doublea):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储)。staticdoublefloor(doublea):地板函数,返回小于等于a的最大整数(但是以浮点数形式存储)。staticdoublerint(doublea):四舍五入函数,返

    2022年4月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号