LanceDB是一种使用持久存储构建的用于矢量搜索的开源数据库,极大简化了检索、过滤和嵌入管理。 LanceDB的主要功能包括:
- 生产规模的矢量搜索,无需管理服务器。
- 存储、查询和过滤矢量、元数据和多模态数据(文本、图像、视频、点云等)。
- 支持矢量相似性搜索、全文搜索和SQL。
- 本地支持Python和Javascript/Typescript。
- 零拷贝、自动版本管理,管理数据版本而无需额外基础设施。
- GPU支持构建矢量索引(
*
)。 - 生态系统集成
- LangChain🦜️🔗
- LlamaIndex🦙
- Apache-Arrow
- Pandas
- Polars
- DuckDB
关于LanceDB中Table
介绍
Table
的方法
name()
: 获取表的名称schema()
: 获取表的模式count_rows()
: 获取表中的行数add()
: 添加记录添加到表中,但传入的参数是需要实现IntoArrow
的类型query()
: 查询表中的记录update()
: 更新表中的记录delete()
: 删除表中的记录create_index()
: 创建索引merge_insert()
: 合并插入vector_search()
: 矢量搜索optimize()
: 优化表add_columns()
: 添加(多)列alter_columns()
: 修改(多)列drop_columns()
: 删除(多)列version()
: 获取表的版本,由于LanceDB使用版本控制变化checkpoint()
: 根据指定版本获取检查点checkpoint_latest()
: 获取最新检查点restore()
: 恢复到指定版本list_indices()
: 列出表的索引
Schema
模式定义Table
定义方式
创建空表
1 完整代码
use arrow_schema::{DataType, Field, Schema};
use lancedb::{connect, Result};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<()> {
let created_empty_talbe = create_empty_table().await?;
println!(
"Created empty table: {}, Table name: {}",
created_empty_talbe,
created_empty_talbe.name()
);
Ok(())
}
#[allow(unused)]
async fn create_empty_table() -> Result<LanceDbTable> {
// 创建模式定义
let schema = Arc::new(Schema::new(vec![
Field::new("id", DataType::Int32, false),
Field::new("name", DataType::Utf8, false),
]));
// 创建数据库URI目录
let uri = "data/sample-lancedb";
// 连接数据库
let db = connect(uri).execute().await?;
// 创建一个空表
let table = db
.create_empty_table("empty_talbe", schema)
.execute()
.await?;
Ok(table)
}
- 包依赖文件
Cargo.toml
文件内容如下:
lancedb = "0.7.0"
tokio = {version = "1.38.0", features = ["rt-multi-thread"]}
arrow-schema = "51.0"