【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 列表。

  1. **倒排表(Postings)**

• 拿到候选 term 后,再跳到 **倒排索引** 的相应偏移量,读出每个 term 的文档号列表、位置等信息。

• 这一步是磁盘或 mmap 读取,**条数多时可能涉及顺序扫描**。


✅ 一句话总结

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

相关推荐
INFINI Labs19 小时前
Easysearch analysis-ik 多词典性能优化:从性能回退到分词性能提升 25%~30%
elasticsearch·性能优化·分词·performance·easysearch·ik
IT飞牛20 小时前
Elasticsearch 技术调研与实践
大数据·elasticsearch·搜索引擎
从此以后自律20 小时前
Git一篇
大数据·elasticsearch·搜索引擎
超人也会哭️呀20 小时前
ES 混合检索(文本+向量)中的条件处理陷阱——当权限过滤遇到关键词查询
android·大数据·elasticsearch
做个文艺程序员1 天前
第03篇:深入 Mapping 与数据类型设计——ES Schema 设计避坑指南
大数据·elasticsearch·搜索引擎·mapping设计
铭毅天下1 天前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎
Elastic 中国社区官方博客2 天前
在 Elasticsearch 中,存储向量查询速度最高提升 3 倍
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
海兰2 天前
从原始日志到系统知识:补齐 AI 可观测性的“上下文层“
人工智能·elasticsearch
逆境不可逃2 天前
【与我学 ClaudeCode】规划与协调篇 之 Skills:按需加载的领域知识框架
大数据·人工智能·elasticsearch·搜索引擎·agent·claudecode
奋斗的老史2 天前
LangChain4j + Elasticsearch 实现企业级向量存储(支持混合检索、元数据过滤)
elasticsearch·langchain4j