当前位置: 首页 > news >正文

【lucene】AttributeSource概述

`AttributeSource` 是 Lucene 分析链(Tokenizer / TokenFilter)的 “属性仓库”:

 

它把 所有需要跨 token 传递的信息(词、偏移、位置、payload …)抽象成 Attribute 接口,并在 一条 TokenStream 链里共享同一份实例,从而避免每轮 token 创建/拷贝对象,保证 零拷贝 + 高性能。

 

---

 

1. 核心职责

 

功能 说明 

仓库注册 通过 `addAttribute(Class<T>)` 声明“我要用哪种属性” 

实例共享 整个链共用同一份属性对象,TokenFilter 只读/改属性,不重新 new 

反射生成 内部用 `Class.newInstance()` 缓存具体实现,避免反射开销 

 

---

 

2. 典型 Attribute 一览

 

Attribute 接口 实现类 作用 

`CharTermAttribute` `CharTermAttributeImpl` 当前 token 字符串 

`OffsetAttribute` `OffsetAttributeImpl` 起始/结束偏移 

`PositionIncrementAttribute` `PositionIncrementAttributeImpl` 位置增量 

`PayloadAttribute` `PayloadAttributeImpl` payload 字节 

`TypeAttribute` `TypeAttributeImpl` token 类型 

 

---

 

3. 使用示例(自定义 TokenFilter)

 

```java

public final class MyFilter extends TokenFilter {

    private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);

    private final OffsetAttribute offAtt = addAttribute(OffsetAttribute.class);

 

    @Override

    public boolean incrementToken() throws IOException {

        if (!input.incrementToken()) return false;

        termAtt.setEmpty().append("prefix_").append(termAtt);

        offAtt.setOffset(offAtt.startOffset(), offAtt.endOffset() + 3);

        return true;

    }

}

```

 

整个链共享 `termAtt` / `offAtt`,无需拷贝。

 

---

 

4. 一句话总结

 

> `AttributeSource` 是 Lucene 的“零拷贝属性仓库”,让 TokenStream 链里的所有组件共享同一份 Attribute 实例,实现高效、低 GC 的流式分词。

http://www.dtcms.com/a/297293.html

相关文章:

  • 【13】C# 窗体应用WinForm——.NET Framework、WinForm、工程创建、工具箱简介、窗体属性及创建
  • Python Multiprocessing 进程池完全教程:从理论到实战
  • Qlora+DPO微调Qwen2.5
  • Python捕获异常
  • Yolov8/Yolov11实例分割训练自有数据集
  • Springboot项目实现将文件上传到阿里云
  • Python实战:数据处理与可视化的奇妙之旅
  • 双指针算法介绍及使用(下)
  • JavaScript 中 let 在循环中的作用域机制解析
  • 没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
  • uniapp使用css实现进度条带动画过渡效果
  • uniapp之微信小程序标题对其右上角按钮胶囊
  • golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
  • 海康SDK球机精确控制[球机预置点配置]
  • 未来之路 - eBPF 与 Cilium 如何重塑网络
  • 在kdb+x中使用SQL
  • 理解Spring中的IoC
  • 基于新型群智能优化算法的BP神经网络初始权值与偏置优化
  • WPF MVVM进阶系列教程(二、数据验证)
  • Elasticsearch-9.0.4安装教程
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)
  • MySQL-Every derived table must have its own alias
  • OpenRLHF:面向超大语言模型的高性能RLHF训练框架
  • 基于 Nginx 与未来之窗防火墙构建下一代自建动态网络防护体系​—仙盟创梦IDE
  • Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
  • 秋招Day19 - 分布式 - 分布式锁
  • 静默的环保革命:Deepoc具身智能如何让垃圾桶读懂垃圾的语言
  • 一道检验编码能力的字符串的题目
  • 进程控制->进程替换(Linux)
  • LLM:Day3