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

【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.dtcms.com/a/276010.html

相关文章:

  • 易混淆英语单词对比解析与记忆表
  • 股票的k线
  • BKD 树(Block KD-Tree)Lucene
  • 以太坊重放攻击
  • 特辑:Ubuntu,前世今生
  • 关于学习docker中遇到的问题
  • AI领域的黄埔军校:OpenAI是新一代的PayPal Mafia,门生故吏遍天下
  • 可以用一台伺服电机控制多台丝杆升降机联动使用吗
  • 类和对象—多态
  • C语言:20250712笔记
  • SpringBoot集合Swagger2构建可视化API文档
  • P2619 [国家集训队] Tree I
  • 【Datawhale AI夏令营】Task2 笔记:MCP Server开发的重难点
  • 【LeetCode 热题 100】98. 验证二叉搜索树——(解法一)前序遍历
  • Python 三大高频标准库实战指南——json · datetime · random 深度解析
  • 【Java入门到精通】(二)Java基础语法(上)
  • 27. 移除元素
  • 【android bluetooth 协议分析 07】【SDP详解 1】【SDP 介绍】
  • 19th Day| 530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数, 236.二叉树的最近公共祖先
  • springboot3X 整合高版本mybatisplus
  • pyqt5绘制矩形和线条
  • 【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
  • C语言<数据结构-单链表>(收尾)
  • Windows 开启和关闭 Administrator 用户的方法
  • 软考高级系系统分师和架构师常考知识点总结三
  • Typecho博客系统与WebSocket实时通信整合指南
  • 网络安全初级--搭建
  • GPU编程入门:CUDA与OpenCL全面解析
  • 聊下easyexcel导出
  • 岛屿数量问题