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的子类TokenizerTokenFilter ,它们还都是抽象类 ,从这两个抽象类可以看出,是在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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 中文人物关系图谱构建与应用项目(人物关系抽取,关系抽取评测)

    中文人物关系图谱构建与应用项目(人物关系抽取,关系抽取评测)ChinesePersonRelationGraphChinesePersonRelationGraph,personrelationshipextractionbasedonnlpmethods.中文人物关系知识图谱项目,内容包括中文人物关系图谱构建,基于知识库的数据回标,基于远程监督与bootstrapping方法的人物关系抽取,基于知识图谱的知识问答等应用.项目地址:htt…

    2022年6月26日
    54
  • 腾讯云服务器配置ssl,腾讯云服务器SSL证书申请及配置[通俗易懂]

    腾讯云服务器配置ssl,腾讯云服务器SSL证书申请及配置[通俗易懂]最近在研究微信小程序,服务端需要部署在一台服务器上,查看了一下,腾讯云在搞活动,就申请了腾讯云的服务器,但是微信小程序访问需要用https协议才能请求,于是研究了一下如何申请及配置ssl证书。本人穷逼一枚,一向以节俭,所以申请了一个免费证书。申请步骤如下:1、登录证书申请页面https://console.qcloud.com/ssl/apply2、输入必要信息,通用名称及申请邮箱,点击下一步这一…

    2025年9月2日
    8
  • Unity Shader入门精要(3D画入门)

    Shader的种类UnityShader是将传统的硬件Shader(由Cg/HLSL编写)嵌入到独有的描述性结构中而形成的一种代码生成框架,最终会自动生成各硬件平台自己的Shader,从而实现跨平台。UnityShader分为表面着色器(SurfaceShader)和顶点片段着色器(VertexAndFragmentShader)。表面着色器(SurfaceShader

    2022年4月11日
    146
  • 网上的腾讯php面试题 (有答案版本)

    网上的腾讯php面试题 (有答案版本)

    2021年11月5日
    44
  • C++中int转string方法

    C++中int转string方法一点睛需要用到snprintf()。函数原型intsnprintf(char*str,size_tsize,constchar*format,…)功能:将可变参数“…”按照format的格式格式化为字符串,然后再将其拷贝至str中。(1)如果格式化后的字符串长度<size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(…

    2022年10月7日
    7
  • mysql读写分离实现事务_Mysql读写分离后的事务ce「建议收藏」

    mysql读写分离实现事务_Mysql读写分离后的事务ce「建议收藏」1.概述很多人会有这样的疑问,mysql读写分离后,我的事务怎么处理呢。不是说mysql不支持跨库事务吗?那我引入mycat这个中间件后事务是否是安全的呢,它是怎么运作的呢。今天我们就来实验一下2.设置首先设置事务锁的过期时间是5innodb_lock_wait_timeout=5意思是前面有人已经锁定这一行准备更新了,而你现在又去更新这行,那你只能等,等5秒。前面的人还没进行事务提交,那…

    2022年5月2日
    151

发表回复

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

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