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

【Lucene/Elasticsearch】 数据类型(ES 字段类型) | 底层索引结构

在 Lucene/Elasticsearch 中,**BKD 树只负责“多维数值”字段**。其余类型仍走传统的 **倒排索引** 或专用格式:

| 数据类型(ES 字段类型) | 底层索引结构 | 说明 |
|---|---|---|
| `text`、`keyword`(字符串) | **倒排索引 + 正排 doc values** | 分词或不分词的倒排列表 |
| `boolean` | **倒排索引**(T/F 两个 term) | 简单布尔过滤 |
| `binary` | **DocValues(行存)** | 原始字节,仅存储/检索,不索引 |
| `object`、`nested`、`flattened` | **子字段递归索引** | 内部仍是倒排/BKD 组合 |
| `range`(整数/日期/浮点范围) | **BKD 树** | 虽然类型叫 range,底层仍存成“低维 BKD 点” |
| `token_count` | **倒排索引** | 实际上是对字符串计数后存数值 |
| `completion`、`search_as_you_type` | **专用 FST** | 用于前缀/补全,不走倒排 |

一句话总结:  
**除了字符串、布尔、二进制等“非数值/非地理/非向量”字段,其余多维数值类(含 range)默认都走 BKD;其余走倒排或专用结构。**

词典之上再建 FST(Finite State Transducer) 二级索引,压缩前缀后缀,实现毫秒级前缀/模糊查询 先查哪个索引呢?

查询顺序是 **先查 FST,再查倒排表**:

1. **FST 二级索引**(内存常驻)  
• 先根据用户输入的前缀或模糊模式,在 **FST** 里快速定位到 **所有候选 term** 的起止位置。  
• FST 只占用词典前/后缀压缩后的字节数组,**毫秒级**就能拿到候选 term 列表。

2. **倒排表(Postings)**  
• 拿到候选 term 后,再跳到 **倒排索引** 的相应偏移量,读出每个 term 的文档号列表、位置等信息。  
• 这一步是磁盘或 mmap 读取,**条数多时可能涉及顺序扫描**。

---

### ✅ 一句话总结  
> **前缀/模糊查询时,先通过内存里的 FST 秒级筛出候选词,再去倒排表里取真正的文档集合。**

http://www.xdnf.cn/news/15224.html

相关文章:

  • 记录Ruoyi-vue-pro芋道商城部署过程
  • C++类模版2
  • BERT:双向Transformer革命 | 重塑自然语言理解的预训练范式
  • 事件驱动设计:Spring监听器如何像咖啡师一样优雅处理高并发
  • Linux的NetworkManager的nmcli配置网桥(bridge) 笔记250712
  • Linux操作系统之进程间通信:共享内存
  • 同步、异步、阻塞、非阻塞之间联系与区别
  • SOEM build on ubuntu
  • 2025Stockapi股票数据接口,股票实时数据,技术指标macd,kdj,cci技术指标算法,集合竞价数据,龙虎榜数据接口
  • 【图像处理基石】如何入门大规模三维重建?
  • Gameplay - 独立游戏Celeste的Player源码
  • Unity开发中常用的洗牌算法
  • 用 Jpom 10 分钟搭好一套轻量级 CICD + 运维平台
  • Python技巧记录
  • 电网失真下单相锁相环存在的问题
  • Redis专题总结
  • 【工具】什么软件识别重复数字?
  • AI产品经理面试宝典第11天:传统软件流程解析与AI产品创新对比面试题与答法
  • 分布式数据库系统模式结构深度解析
  • C++ 模板工厂、支持任意参数代理、模板元编程
  • 科技驯服烈日狂沙:中东沙漠农场的光储革命
  • 开发AI Agent到底用什么框架——LangGraph VS. LlamaIndex,一文看懂!
  • 使用Java完成下面程序
  • docker 443错误 lookup docker.mirrors.ustc.edu.cn: no such host
  • CCF CSP第一轮认证一本通
  • 深度学习-卷积化
  • 【离线数仓项目】——电商域DWD层开发实战
  • 【C++小白逆袭】内存管理从崩溃到精通的秘籍
  • EPLAN 电气制图(七):电缆设计全攻略
  • 【设计模式】外观模式(门面模式)