LanceDB 怎么用:Python 本地向量库写入与相似度检索

LanceDB 是一个嵌入式向量数据库,不需要单独启动服务端,装好 Python 包后直接在本机目录里建库、建表、写数据。
如果你的需求是本地跑 RAG 原型、做小规模语义检索,它比 Milvus、Weaviate 这类需要 Docker 部署的方案更省事。
下面按安装、写入、查询、排错的顺序走一遍。

安装前确认 Python 环境和依赖

LanceDB 通过 pip 分发,建议 Python 3.9 以上。
先确认版本:

python3 --version
pip3 --version

然后安装:

pip3 install lancedb

如果同时要用到向量模型生成 embedding,再装 sentence-transformers 或你选用的模型库。
LanceDB 本身不负责把文本转成向量,它只存向量和做检索,这一点新手容易误解。

安装完成后用一行命令验证是否可用:

import lancedb
print(lancedb.__version__)

能打印出版本号就说明环境没问题。

建库、建表和写入第一批数据

LanceDB 的数据组织方式是“库目录 + 表”。
库就是一个本地路径,表对应一组结构一致的记录。
示例代码如下:

import lancedb
import numpy as np

db = lancedb.connect("./lancedb_data")

data = [
    {"id": 1, "text": "服务器磁盘满了怎么排查", "vector": np.random.rand(4).tolist()},
    {"id": 2, "text": "Nginx 反向代理配置方法", "vector": np.random.rand(4).tolist()},
    {"id": 3, "text": "MySQL 连接超时的处理", "vector": np.random.rand(4).tolist()},
]

table = db.create_table("docs", data=data)
print(table.count_rows())

几个关键点:

  • connect 的路径不存在时会自动创建,不需要提前 mkdir。
  • 每条记录的 vector 维度必须一致,这里是 4 维,实际使用中要和你的 embedding 模型输出维度对齐。
  • create_table 如果表已存在会报错,重复运行时改用 db.open_table("docs") 或先删表。
  • 除向量外可以带任意标量字段,比如 text、id、category,后续可以用来过滤。

写入后执行 table.count_rows(),返回 3 说明数据已经落盘。

做一次相似度查询并验证结果

查询的核心是给一个查询向量,让 LanceDB 返回最接近的若干条记录:

query_vec = np.random.rand(4).tolist()

results = table.search(query_vec).limit(2).to_pandas()
print(results[["id", "text", "_distance"]])

_distance 是距离值,数值越小表示越相似。
验证是否正常,可以看两点:返回条数是否等于 limit,以及 _distance 是否按升序排列。
如果不是升序,检查是否误用了其他距离度量。

需要按字段筛选时,在 search 后加 where:

results = table.search(query_vec).where("id > 1").limit(5).to_pandas()

这样只会在满足条件的记录里做向量检索,适合按分类、时间范围缩小候选集的场景。

容易踩的坑和报错处理

维度不一致是最常见的报错,通常表现为写入或查询时提示向量长度不匹配。
处理方式是打印第一条记录的向量长度和查询向量长度做对比,确保两者一致。

重复建表会抛出表已存在的错误。
调试阶段可以每次运行前删除目录,生产环境则用 open_table 打开已有表再追加数据。

路径写错导致数据“消失”。connect 用的是相对路径时,结果取决于当前工作目录,建议在脚本里用绝对路径,避免换目录运行后读不到数据。

把文本直接当向量传入。
LanceDB 不会自动把字符串转成向量,必须先用模型生成 embedding 再写入,否则查询结果没有语义意义。

适用边界和下一步

LanceDB 适合单机、中小数据量、快速验证的场景,比如本地知识库原型、桌面应用内嵌检索。
它的优势是不用维护独立服务,数据以文件形式存在本地目录,备份和迁移就是拷贝目录。
如果数据量增长到需要多节点、高并发或集中运维,再考虑服务端向量数据库。

建议先按上面的代码在临时目录跑通一次写入和查询,确认 _distance 排序正确,再替换成真实 embedding 模型。
遇到异常时优先检查向量维度、表是否已存在、当前工作目录这三个点。

分享到:
上一篇
pgvector 扩展怎么装:在 PostgreSQL 里完成向量存储与相似度查询
下一篇
DeepLake 向量库怎么用:建库、写入与相似度检索
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意