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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入 Nginx 之配置篇

    深入 Nginx 之配置篇

    2021年11月7日
    46
  • MySQL多表关联查询优化

    MySQL多表关联查询优化背景最近在对运营报表导出进行优化,总结了一些多表关联查询优化的点记录一下。避免临时表通过Explain分析SQL语句,尽量不要使用到临时表。GROUPBY(Explain具体详解,可以看这篇博客)最容易造成使用临时表,GROUPBY与临时表的关系:  1.如果GROUPBY的列没有索引,产生临时表.  2.如果GROUPBY时,SELECT的列不止GROUP…

    2022年5月30日
    41
  • vs2010 产品密钥[通俗易懂]

    vs2010 产品密钥[通俗易懂]YCFHQ9DWCYDKV88T2TMHG7BHP转载于:https://www.cnblogs.com/qiwu1314/p/8466855.html

    2022年5月3日
    72
  • ssl通关的概念(一个)

    ssl通关的概念(一个)

    2022年1月6日
    45
  • Django(50)drf异常模块源码分析

    Django(50)drf异常模块源码分析异常模块源码入口APIView类中dispatch方法中的:response=self.handle_exception(exc)源码分析我们点击handle_exception跳转,查看该

    2022年7月31日
    6
  • 5.16 综合案例2.0-久坐提醒系统(2.2版本接口有更新)

    5.16 综合案例2.0-久坐提醒系统(2.2版本接口有更新)综合案例2.0-久坐提醒系统简介准备硬件连接图代码流程功能实现1、物联网平台开发2、设备端开发3、调试调试结果4、钉钉消息提醒4.1添加钉钉机器人4.2、IoTStudio设置简介长期久坐会损害身体健康,本案例就是为了提醒人们不要坐太久而设计的一个提醒系统。当你长时间在工位上坐着,他会通过顶顶提醒你,让你每隔一段时间活动一下筋骨。久坐提醒设备是通过人体红外检测周围区域是否有人移动,当累计检测时长超过设定值,将会在钉钉群发来提醒,每次回到座位会重新开始计时。并且提醒时间可以自行调节,默认30分钟。准备

    2022年10月1日
    4

发表回复

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

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