Lucene(8_2_0)核心API学习 之 TokenStream(一)「建议收藏」

Lucene(8_2_0)核心API学习 之 TokenStream(一)「建议收藏」一、继承org.apache.lucene.analysis.TokenStreamentendsorg.apache.lucene.util.AttributeSource二、详情TokenStream是一个抽象类,是一系列Token的枚举,这里的Token有两个来源,一是Document的Fields,一是查询语句Query; 这是一个抽象类,有两个具体子类:Tokeni…

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

一、继承

org.apache.lucene.analysis.TokenStream  entends org.apache.lucene.util.AttributeSource

二、详情

  1. TokenStream是一个抽象类,是一系列Token的枚举,这里的Token有两个来源,一是Document的Fields,一是查询语句Query;
  2. 这是一个抽象类,有两个具体子类:

Tokenizer,分词器,输入为Reader;

TokenFilter,过滤器,输入为TokenStream;

用法:一般先用分词器分词,然后用过滤器过滤,这样可以缩小搜索范围,提高效率;

      3. TokenStream继承于AttributeSource,AttributeSource提供给TokenStream访问所有Token属性Attributes的方法。注意每一个AttributeImpl(Attribute的实现类)只有一个实例(单例模式)被创造,然后被所有的tokens重复使用。这样做是为了减少创建对象的消耗,同时允许对AttributeImpl引用的本地缓存。看incrementToken()可以获得更多详情。

三、TokenStream工作流程的核心API

  1. 实例化(Instantiation):实例化一个TokenStream或TokenFilter需要从AttributeSource添加相应的属性;
  2. 状态重置(reset):消费者在使用token前一定要先将状态reset(),因为每一个属性是单例的,被所有token使用;
  3. 查询属性并存储在本地:消费者从stream流中检索属性,并在本地存储指向这些属性的引用;
  4. 调用incrementToken():消费者不断调用incrementToken,获取下一个Token,直到返回错误;
  5. end():消费者调用end()表示token已经遍历完了,可以执行一些遍历结束时的操作;
  6. close():释放相关资源;

        我的理解:把Token当做建立索引时lucene可以处理的最小单元,而TokenStream是一个存储了一系列Token的流,当你需要使用时,一个一个从流中取出Token来处理。

四、进一步解释

  • 为了确保消费者和过滤器知道哪些属性是可用的,这些属性必须在实例化时被添加进去。过滤器和消费者不小在incrementToken()中检查这些属性的可用性;
  • 应为TokenStream的API是基于装饰者模式的,因此所有的非抽象子类必须是final,或者至少有一个final修饰的incrementToken()的实现方法!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 何时使用或何时不使用malloc函数

    何时使用或何时不使用malloc函数在初学数据结构时,我们往往不太清楚在定义一个结构体指针时要不要使用malloc函数。例如以下的代码:LINKLIST*initlinklist(){LINKLIST*H=NULL;LINKLIST*S;intx;printf(“请输入链表元素或以-1结束输入”)while(x!=-1){s=(LINKLIST*

    2022年6月7日
    30
  • Hibernate配置文件

    Hibernate配置文件

    2021年12月3日
    33
  • Reactor模式详解

    Reactor模式详解在学习Reactor模式之前,我们需要对“I/O的四种模型”以及“什么是I/O多路复用”进行简单的介绍,因为Reactor是一个使用了同步非阻塞的I/O多路复用机制的模式。I/O的四种模型I/0

    2022年8月2日
    11
  • jdbc 中 excute executeUpdate的用法作用

    jdbc 中 excute executeUpdate的用法作用Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate和execute。使用哪一个方法由SQL语句所产生的内容决定。 方法e

    2022年7月2日
    23
  • Ffmpeg进行视频文件转换

    Ffmpeg进行视频文件转换

    2021年9月1日
    70
  • 操作系统linux:银行家算法(C语言实现)

    操作系统linux:银行家算法(C语言实现)一、实验内容和要求1、在Linux环境下编译运行程序;2、按照教材的算法编写;3、输入数据从文本文件中读出,不从键盘录入,数据文件格式见以下说明;4、主要数据结构的变量名和教材中的一致,包括Available、Max、Allocation、Need、Request、Work、Finish。5、程序可支持不同个数的进程和不同个数的资源;6、验证教材中的“银行家算法示例”中的例子(包括可成功分配、不可分配)。二、实验原理1.资源分配算法令Requesti表示进程pi的申请向量。Reques

    2022年5月20日
    38

发表回复

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

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