更新时间:2026-07-03 GMT+08:00
分享

Lance索引介绍

Lance将索引视为独立的、冗余的数据结构,分层构建在表行标识符之上。这使文件格式免于内置搜索结构,并允许索引格式独立于表布局演进。Lance支持三大类索引:标量索引、向量索引和系统索引。

标量索引

标量索引加速对整数、时间戳和字符串等标量数据类型的查询。Lance支持的标量索引请参考表1

表1 标量索引类型

索引类型

存储文件

加速查询

说明

Zone Map

zonemap.lance

Equals、Range、IsIn、IsNull

将数据分成固定大小的区域,维护min/max/null_count统计信息,用于谓词下推和扫描裁剪。可能包含误报,需要重新检查。

BTree

page_lookup.lance + page_data.lance

Equals、Range、IsIn、IsNull

两级结构,上层BTree缓存于内存,下层子索引存储排序值和行ID。平衡内存结构和磁盘结构。

Bitmap

bitmap_page_lookup.lance

Equals、Range、IsIn、IsNull

使用位数组表示值的存在或缺失,适用于低基数列,提供极快的查询性能。

Bloom Filter

bloomfilter.lance

Equals、IsIn、IsNull

概率数据结构,允许快速成员测试。空间高效,可能有误报但无误漏。使用Split Block Bloom Filter(SBBF)实现,优化SIMD操作。

Full Text Search

tokens.lance + docs.lance + invert.lance + metadata.lance

contains_tokens、match、phrase、boolean、multi_match、boost

倒排索引,将词项映射到包含它们的文档。支持BM25评分、短语查询和多种分词

器。

Label List

bitmap_page_lookup.

lance

array_has / array_contains、array_has_all、array_has_any

标签列表索引针对每行包含多个标签或标记的列进行了优化。它们使用底层的位图索引,针对多值列提供高效的基于集合的查询。

N-gram

ngram_postings.lance

contains

N-gram 索引将文本分解为重叠的序列(三元组),以实现高效的子字符串匹配。通过在应用 ASCII 折叠和转为小写后,对文本中所有 三元组序列进行索引,从而提供快速的文本搜索功能。

R-Tree

page_data.lance

Intersects、Contains、Within、Touches、Crosses、Overlaps、Covers、CoveredBy、IsNull

基于边界框(Bounding Boxes)构建以组织数据。该索引旨在加速基于矩形的修剪操作

向量索引

向量索引专用于高维嵌入的近似最近邻搜索(ANN)。Lance将每个向量索引分为3个部分:聚类(Clustering)、子索引(Sub-Index)和量化(Quantization)。

  • 聚类:将所有向量划分为不同的不相交簇。Lance目前支持使用倒排文件(IVF)作为主要聚类机制,使用k-means聚类算法将向量分区。
  • 子索引:决定向量如何组织以进行搜索。支持FLAT(精确搜索,无近似)和HNSW(分层可导航小世界图,快速近似搜索)。
  • 量化:决定向量如何存储和压缩。支持Product Quantization(PQ,乘积量化)、Scalar Quantization(SQ,标量量化)、RabitQ(RQ,随机旋转二值量化)和FLAT(不量化,保留原始向量)。

索引类型通常由 {clustering}_{sub_index}_{quantization} 构成。若子索引为 FLAT,则通常省略该项,简记为 {clustering}_{quantization}。

表2 向量索引类型

索引类型

名称

说明

IVF_PQ

倒排文件+乘积量化

结合IVF聚类与PQ压缩,实现高效存储和搜索

IVF_HNSW_SQ

倒排文件+HNSW+标量量化

使用IVF粗聚类和HNSW细粒度搜索,配合标量量化

IVF_SQ

倒排文件+标量量化

结合IVF聚类与标量量化,实现平衡压缩

IVF_RQ

倒排文件+RabitQ

结合IVF聚类与RabitQ,使用二值量化实现极限压缩

IVF_FLAT

倒排文件+无量化

使用IVF聚类与精确向量存储,在簇内进行精确搜索

系统索引

系统索引是支持内部表维护和行标识符解析的辅助结构,不由最终用户直接查询。例如Fragment Reuse Index支持压缩后的高效重映射。

  • 碎片重用索引 (Fragment Reuse Index, FRI)用于在压缩 (compaction) 和数据集更新期间优化碎片操作。
  • MemWAL索引作为所有MemWAL元数据的集中式结构。它存储配置(分片规格、需维护的索引)、合并进度以及分片状态快照。

相关文档