尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LanceDB Node.js SDK 索引统计:IndexStatistics 接口字段详解与实战

LanceDB Node.js SDK 索引统计:IndexStatistics 接口字段详解与实战 向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载导读IndexStatistics是 LanceDB Node.js SDKlancedb/lancedb中描述单个索引运行状态的核心数据结构。当你对表中的向量列、标量列或全文检索列创建索引后可以通过Table.indexStats(name)获取该索引的统计信息用于判断索引覆盖率、索引类型、距离度量以及分片数量。本文以官方接口文档为骨架结合仓库中的 Rust 原生实现、TypeScript 绑定与测试用例逐字段解读IndexStatistics的语义与取值并给出完整的实战调用示例帮助你掌握建索引—查统计—评估覆盖率—决定是否重训/优化的完整工作流。接口概览IndexStatistics 定义了什么IndexStatistics接口定义于 docs/src/js/interfaces/IndexStatistics.md它由 5 个字段组成字段类型是否可选含义indexTypestring必选索引的类型numIndexedRowsnumber必选被该索引覆盖的行数numUnindexedRowsnumber必选未被索引覆盖的行数distanceTypestring可选索引使用的距离函数类型仅向量索引存在numIndicesnumber可选该索引被拆分成的分片part数量该接口并非凭空定义而是由 Node 原生模块中的同名结构体直接映射而来。在 nodejs/src/table.rs 中#[napi(object)]修饰的IndexStatistics结构体完整对应上述五个字段并通过Fromlancedb::index::IndexStatistics将 Rust 核心库的统计结果转换为 JS 可读的对象。因此文档中字段的类型语义如num_indexed_rows为f64、num_indices为Optionu32与底层保持一致undefined即对应 Rust 侧的None。获取索引统计Table.indexStats(name)IndexStatistics的典型获取方式是调用Table.indexStats(name)abstract indexStats(name: string): PromiseIndexStatistics | undefined;接口定义见 nodejs/lancedb/table.ts。需要特别注意两点返回值为undefined的情形当指定名称的索引不存在时该方法返回undefined而非抛错。实现在 nodejs/lancedb/table.ts 中底层inner.indexStats(name)返回null时被转换为undefined。索引名称来源索引名通常由 SDK 自动生成如对vec列建索引会生成vec_idx建议先通过Table.listIndices()获取索引名称列表再逐个查询统计。底层调用链为Table.indexStats→ 原生table.index_stats(index_name)nodejs/src/table.rs→ Rust 核心库lancedb::Table::index_statsrust/lancedb/src/table.rs。Rust 侧的注释明确说明索引不存在时返回None这一语义贯穿到各语言 SDK。完整示例创建索引并读取统计import * as lancedb from lancedb/lancedb; const db await lancedb.connect(data/sample-lancedb); const table await db.createTable(my_table, [ { id: 1, vector: [0.1, 1.0], item: foo, price: 10.0 }, { id: 2, vector: [0.2, 0.9], item: bar, price: 20.0 }, ]); // 1. 创建标量索引 await table.createIndex(id); // 2. 查询统计 const stats await table.indexStats(id_idx); if (stats) { console.log(stats.indexType); // 例如 BTREE console.log(stats.numIndexedRows); // 已建索引的行数 console.log(stats.numUnindexedRows);// 尚未入索引的行数 console.log(stats.distanceType); // undefined标量索引无距离函数 console.log(stats.numIndices); // 分片数 } // 3. 查询不存在的索引会得到 undefined const missing await table.indexStats(some non-existent index); console.log(missing); // undefined字段逐项解读indexType索引类型必选字段indexType: string表示索引的类型。从 Python 侧的类型定义python/python/lancedb/table.py可以看到LanceDB 支持的索引类型包括向量索引IVF_FLAT、IVF_SQ、IVF_PQ、IVF_RQ、IVF_HNSW_SQ、IVF_HNSW_PQ、IVF_HNSW_FLAT以及标量/全文索引FTS、BTREE、BITMAP、LABEL_LIST。Node SDK 中indexType为字符串值由底层IndexType::to_string()生成nodejs/src/table.rs。在 rust/lancedb/src/index.rs 的单元测试中可以看到索引类型名称的规范化逻辑例如NGram的规范输出为NGRAMBloomFilter为BLOOM_FILTERRTree为RTREE同时兼容大小写与下划线变体解析。这意味着你在比较indexType字符串时应以规范大写形式为准。numIndexedRows 与 numUnindexedRows索引覆盖率这一对字段是评估索引健康度的核心numIndexedRows: number被该索引覆盖的行数numUnindexedRows: number未被该索引覆盖的行数。Rust 核心层的定义rust/lancedb/src/index.rs明确指出num_unindexed_rows是尚未被加入索引的行These are rows that havent yet been added to the index。因此当表持续add新数据而索引未更新时numUnindexedRows会增长此时查询可能退化为全表扫描或部分回退需要通过optimize()触发索引增量更新来提升覆盖率。测试 python/python/tests/test_table.py 完整演示了这一生命周期先建索引时num_indexed_rows 2随后add一行数据此时再查询统计会发现已索引行数仍为 2执行optimize()后num_indexed_rows更新为 3未索引行数归零。distanceType距离函数仅向量索引可选字段distanceType?: string只在向量索引上存在标量索引与全文检索FTS索引没有距离函数因此该字段为undefined。文档注释docs/src/js/interfaces/IndexStatistics.md与 Rust 源码注释nodejs/src/table.rs保持一致。从 Python 测试python/python/tests/test_index.py可以归纳出常见取值索引/场景distanceType 取值IVF_PQ / IVF_SQ / IVF_FLAT浮点向量l2二进制向量IVF_FLAThammingBITMAP / BTREE 等标量索引undefined/None该字段本质上来自 Rust 侧的OptionDistanceType仅在向量索引元数据中记录metric_type见 rust/lancedb/src/index.rs。numIndices分片数量可选字段numIndices?: number表示该索引被拆分成多少个部分parts。向量索引在创建时可指定numPartitions等训练参数最终索引会被拆分为多个分片该字段即反映这一拆分结果。在测试 nodejs/test/table.test.ts 中默认创建索引后numIndices为1。结合源码的进阶认识统计数据的底层来源Rust 核心库中IndexStatistics的构建来自IndexStatisticsImplrust/lancedb/src/index.rs它反序列化底层 Dataset 返回的index_statistics()JSON包含num_indexed_rows、num_unindexed_rows、indices其中含metric_type和num_indices。也就是说你在 JS 中读到的统计字段最终来源于存储引擎Lance format层面的索引元数据而非实时扫描计算。跨语言一致性同一个概念在三种 SDK 中保持一致的语义与命名Node.jsIndexStatistics接口本文主题字段为 camelCasePythonIndexStatisticsdataclasspython/python/lancedb/table.py字段为 snake_casenum_indexed_rows、distance_type等并保留了对旧字典式访问的兼容__getitem__Rustlancedb::index::IndexStatisticsrust/lancedb/src/index.rs。Python 测试 python/python/tests/test_remote_db.py 还展示了远程云表的统计响应格式index_type、num_indexed_rows、num_unindexed_rows说明该数据结构在本地嵌入模式与云服务场景下是一致的。嵌套字段索引的统计对于嵌套结构字段如MetaData.userIdindex_stats返回的统计同样有效且测试覆盖了嵌套标量索引与嵌套向量索引的场景python/python/tests/test_nested_fields.py、python/python/tests/test_nested_fields.py。这也印证了indexStats传入的索引名而非列名是唯一标识统计按索引维度聚合。实战建议用统计驱动索引维护结合上述字段语义推荐将indexStats纳入以下日常巡检流程建索引后立即校验numIndexedRows应等于表行数、numUnindexedRows为 0否则说明建索引过程未完整覆盖例如训练数据未覆盖新增分区。增量写入后监控每次批量add数据后比对numUnindexedRows是否增长据此决定是否触发optimize()更新索引。区分索引类型分支判断distanceType是否为undefined来区分向量索引与标量/FTS 索引避免对不同类型索引做统一的假设。处理 undefined 返回值indexStats对不存在的索引返回undefined可作为索引是否已创建的探测手段但注意与索引存在但统计暂不可用区分必要时结合listIndices()交叉验证。async function ensureIndexCoverage(table, indexName, expectedRows) { const stats await table.indexStats(indexName); if (!stats) { console.warn(索引 ${indexName} 不存在); return; } const coverage stats.numIndexedRows / (stats.numIndexedRows stats.numUnindexedRows); console.log( 索引类型${stats.indexType} 覆盖率${(coverage * 100).toFixed(1)}% 已索引${stats.numIndexedRows} 未索引${stats.numUnindexedRows} 距离函数${stats.distanceType ?? N/A非向量索引} 分片数${stats.numIndices ?? N/A} ); if (coverage 1) { // 建议触发 optimize() 更新索引后再评估 console.warn(索引 ${indexName} 尚未完全覆盖全部行); } }小结IndexStatistics虽然只有五个字段却是理解 LanceDB 索引运行状态的最小完整视图indexType告诉你索引是什么numIndexedRows/numUnindexedRows告诉你覆盖是否完整distanceType告诉你向量距离度量numIndices告诉你分片规模。通过Table.indexStats(name)即可获取返回undefined表示索引不存在。将其与createIndex、listIndices、optimize组合使用即可构建一套完整的索引生命周期管理流程。本文字段语义均可在 nodejs/src/table.rs、rust/lancedb/src/index.rs 及相应测试用例中逐一验证。赞分享向量数据库数据库人工智能后端【免费下载链接】lancedbDeveloper-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less.项目地址https://gitcode.com/gh_mirrors/la/lancedb点击查看免费下载相关推荐终极Android漫画阅读器Mihon完整功能深度解析与使用指南终极Android漫画阅读器Mihon完整功能深度解析与使用指南 Mihon是一款免费开源的Android漫画阅读器应用为用户提供完整的漫画、网络漫画和漫画向量数据库数据库人工智能后端如何重新定义跨平台开发hello-uniapp的技术架构演化路径如何重新定义跨平台开发hello uniapp的技术架构演化路径 在移动应用开发领域跨平台框架长期面临性能损耗与原生体验的权衡困境。hello uniapp向量数据库数据库人工智能后端envsafe实战教程如何在Next.js项目中配置环境变量验证envsafe实战教程如何在Next.js项目中配置环境变量验证 envsafe是一个强大的环境变量验证工具能确保你不会意外部署缺少或无效环境变量的应用。本向量数据库数据库人工智能后端上一篇7天完成传统3个月的长篇小说创作AI智能写作工具深度解析下一篇实战指南5分钟搭建高效OSINT情报分析系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表