AI向量数据库之LanceDB快速介绍

news2025/2/21 18:32:22

LanceDB

LanceDB 是一个开源的向量搜索数据库,具备持久化存储功能,极大地简化了嵌入向量的检索、过滤和管理。
在这里插入图片描述

LanceDB的主要特点

LanceDB 的主要特点包括:

  • 生产级向量搜索:无需管理服务器。

  • 存储、查询和过滤向量、元数据以及多模态数据(如文本、图像、视频、点云等)。

  • 支持向量相似性搜索、全文搜索和 SQL

  • 原生支持 Python 和 Javascript/Typescript

  • 零拷贝、自动版本控制:无需额外基础设施即可管理数据版本。

  • 支持 GPU 加速构建向量索引(*)。

  • 生态系统集成:与 LangChain 🦜️🔗、LlamaIndex 🦙、Apache-Arrow、Pandas、Polars、DuckDB 等工具集成,更多集成正在开发中。

LanceDB 的核心是用 Rust 🦀 编写的,并基于 Lance 构建。

Lance 是一种开源列式数据格式,专为高性能机器学习工作负载设计。

基于NodeJS 使用 LanceDB

需要先安装NodeJS,这里对 NodeJS的部分就不做过多的介绍。关于NodeJS的介绍和安装可以参考:

npm介绍及与Node.js关联

项目创建

  1. 创建一个项目目录, 这里是 lancedb
  2. 命令行切换到该目录,执行 npm init -y 初始化项目。
    这个命令就是创建 package.json 文件
  3. 创建src 目录用来存放源码
    (src目录非必要, 也有的项目是app目录,目的就是为了让项目结构更清晰)
  4. 安装lanceDB 的库
npm install @lancedb/lancedb

该命令的作用包括:

  1. 安装 LanceDB 客户端库

    • 该命令会从 npm 仓库下载并安装@lancedb/lancedb包。

    • 安装完成后,你可以在项目中引入 LanceDB 并使用其 API 进行向量存储、查询和管理。

  2. 更新package.json

    • 安装完成后,@lancedb/lancedb会被添加到package.json文件的dependenciesdevDependencies中(取决于你是否使用了--save-dev选项)。

    • 示例:

      json

      复制

      "dependencies": {
        "@lancedb/lancedb": "^1.0.0"
      }
      
  3. 生成node_modules文件夹

    • 安装的库及其依赖会被下载到项目的node_modules文件夹中。
  4. 生成package-lock.json

    • 安装过程中会更新或生成package-lock.json文件,确保依赖版本的一致性。

编写 Javascript 代码操作LanceDB

在src 下新建一个 quickstart.js 文件,内容如下:

import * as lancedb from "@lancedb/lancedb";

const db = await lancedb.connect("data/my-lancedb");
const table = await db.createTable("vectors", [
	{ id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
	{ id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], {mode: 'overwrite'});


const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();




const rowsByCriteria = await table.query().where("price >= 10").toArray();

以上代码的解释如下:

1. 导入 LanceDB 库

import * as lancedb from "@lancedb/lancedb";
  • 这行代码导入了 LanceDB 的 Node.js 客户端库。

  • import * as lancedb表示将整个库的内容导入为一个命名空间lancedb,方便后续调用其 API。


2. 连接数据库

const db = await lancedb.connect("data/my-lancedb");
  • 使用lancedb.connect()方法连接到 LanceDB 数据库。

  • "data/my-lancedb"是数据库的存储路径。如果路径不存在,LanceDB 会自动创建。

  • await表示这是一个异步操作,等待连接完成后再继续执行后续代码。


3. 创建表并插入数据

const table = await db.createTable("vectors", [
  { id: 1, vector: [0.1, 0.2], item: "foo", price: 10 },
  { id: 2, vector: [1.1, 1.2], item: "bar", price: 50 },
], { mode: 'overwrite' });
  • 使用db.createTable()方法创建一个名为"vectors"的表。

  • 第二个参数是一个数组,表示要插入的初始数据。每条数据是一个对象,包含以下字段:

    • id: 唯一标识符。

    • vector: 向量数据(例如[0.1, 0.2])。

    • item: 项目的名称(例如"foo")。

    • price: 项目的价格(例如10)。

  • 第三个参数{ mode: 'overwrite' }表示如果表已经存在,则覆盖它。如果表不存在,则创建新表。


4. 向量搜索

const query = table.vectorSearch([0.1, 0.3]).limit(2);
const results = await query.toArray();
  • 使用table.vectorSearch()方法进行向量搜索。

    • [0.1, 0.3]是查询向量,LanceDB 会查找与这个向量最相似的数据。
  • limit(2)表示只返回最相似的 2 条结果。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在results变量中,通常是一个包含相似向量数据的数组。


5. 条件查询

const rowsByCriteria = await table.query().where("price >= 10").toArray();
  • 使用table.query()方法创建一个查询对象。

  • where("price >= 10")是一个过滤条件,表示只返回price字段大于或等于 10 的数据。

  • await query.toArray()将查询结果转换为数组并返回。

  • 结果会存储在rowsByCriteria变量中,通常是一个符合条件的数据数组。

在VS Code的项目目录结构如下:

在这里插入图片描述

运行代码

使用node .\src\quickstart.js 命令运行代码, 运行后会在项目目录下创建 data 目录存放Db 的数据, 效果如下:

在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7 安装配置FTP服务

CentOS7 安装配置FTP服务 CentOS7 安装配置FTP服务1. FTP简介2. 先行准备2.1 关闭防火墙2.2 关闭 SELinux 3.安装FTP软件包4. 创建 FTP 用户及目录4.1 创建 FTP 目录并设置权限4.2 防止 FTP 用户登录 Linux 终端4.3 创建 FTP 用户组及用户4.4 创建 FTP 可写目录 5. 配置ftp服务…

【设计模式】03-理解常见设计模式-行为型模式(专栏完结)

前言 前面我们介绍完创建型模式和创建型模式,这篇介绍最后的行为型模式,也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配,以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…

编程题-最大子数组和(中等-重点【贪心、动态规划、分治思想的应用】)

题目: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 解法一(枚举法-时间复杂度超限): …

本地通过隧道连接服务器的mysql

前言 服务器上部署了 mysql,本地希望能访问该 mysql,但是又不希望 mysql 直接暴露在公网上 那么可以通过隧道连接 ssh 端口的方式进行连接 从外网看,服务器只开放了一个 ssh 端口,并没有开放 3306 监听端口 设置本地免密登录 …

2. grafana插件安装并接入zabbix

一、在线安装 如果不指定安装位置,则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…

Linux第107步_Linux之PCF8563实验

使用PCF8563代替内核的RTC,可以降低功耗,提高时间的精度。同时有助于进一步熟悉I2C驱动的编写。 1、了解rtc_time64_to_tm()和rtc_tm_to_time64() 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seco…

功能说明并准备静态结构

功能说明并准备静态结构 <template><div class"card-container"><!-- 搜索区域 --><div class"search-container"><span class"search-label">车牌号码&#xff1a;</span><el-input clearable placeho…

[免费]SpringBoot公益众筹爱心捐赠系统【论文+源码+SQL脚本】

大家好&#xff0c;我是老师&#xff0c;看到一个不错的SpringBoot公益众筹爱心捐赠系统&#xff0c;分享下哈。 项目介绍 公益捐助平台的发展背景可以追溯到几十年前&#xff0c;当时人们已经开始通过各种渠道进行公益捐助。随着互联网的普及&#xff0c;本文旨在探讨公益事业…

ML.Net二元分类

ML.Net二元分类 文章目录 ML.Net二元分类前言项目的创建机器学习模型的创建添加模型选择方案训练环境的选择训练数据的添加训练数据的选择训练数据的格式要预测列的选择模型评估模型的使用总结前言 ‌ML.NET‌是由Microsoft为.NET开发者平台创建的免费、开源、跨平台的机器学习…

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …

本地搭建自己的专属客服之OneApi关联Ollama部署的大模型并创建令牌《下》

这里写目录标题 OneApi1、渠道设置2、令牌创建 配置文件修改修改配置文件docker-compose.yml修改config.json到此结束 上文讲了如何本地docker部署fastGtp&#xff0c;相信大家也都已经部署成功了&#xff01;&#xff01;&#xff01; 今天就说说怎么让他们连接在一起 创建你的…

【C】初阶数据结构4 -- 双向循环链表

之前学习的单链表相比于顺序表来说&#xff0c;就是其头插和头删的时间复杂度很低&#xff0c;仅为O(1) 且无需扩容&#xff1b;但是对于尾插和尾删来说&#xff0c;由于其需要从首节点开始遍历找到尾节点&#xff0c;所以其复杂度为O(n)。那么有没有一种结构是能使得头插和头删…

小爱音箱控制手机和电视听歌的尝试

最近买了小爱音箱pro&#xff0c;老婆让我扔了&#xff0c;吃灰多年的旧音箱。当然舍不得&#xff0c;比小爱还贵&#xff0c;刚好还有一台红米手机&#xff0c;能插音箱&#xff0c;为了让音箱更加灵活&#xff0c;买了个2元的蓝牙接收模块Type-c供电3.5接口。这就是本次尝试起…

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前&#xff0c;我们先回顾下Java中的Lambda表达式&#xff0c;Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能&#xff0c;它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…

Java 设计模式之备忘录模式

文章目录 Java 设计模式之备忘录模式概述UML代码实现 Java 设计模式之备忘录模式 概述 备忘录(Memento)&#xff1a;在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。方便对该对象恢复到原先保存的状态。 UML Originnato…

vue3搭建实战项目笔记二

vue3搭建实战项目笔记二 2.1.git管理项目2.2.隐藏tabBar栏2.2.1 方案一&#xff1a;在路由元信息中设置一个参数是否显示tabBar2.2.2 方案二&#xff1a;通过全局设置相对定位样式 2.3.项目里封装axios2.3.1 发送网络请求的两种做法2.3.2 封装axios并发送网络请求2.3.2.1 对axi…

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框

前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能&#xff0c;可以选择不同的定时任务类型&#xff0c;比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框&#xff0c;需要动态显隐输入框才行&#xff0c;但是这个vue-element-plus-adm…

大疆无人机需要的kml文件如何制作kml导出(大疆KML文件)

大疆无人机需要的轨迹kml文件&#xff0c;是一种专门的格式&#xff0c;这个kml里面只有轨迹点&#xff0c;其它的属性信息都不需要。 BigemapPro提供了专门的大疆格式输出&#xff0c; 软件这里下载 www.bigemap.com 安装后&#xff0c;kml导入如下图&#xff1a; 然后选择…

免费deepseek的API获取教程及将API接入word或WPS中

免费deepseek的API获取教程: 1 https://cloud.siliconflow.cn/中注册时填写邀请码&#xff1a;GAejkK6X即可获取2000 万 Tokens; 2 按照图中步骤进行操作 将API接入word或WPS中 1 打开一个word&#xff0c;文件-选项-自定义功能区-勾选开发工具-左侧的信任中心-信任中心设置…

(三)Axure制作转动的唱片

效果图 属性&#xff1a; 图标库&#xff1a;iconfont-阿里巴巴矢量图标库 方形图片转为圆角图片&#xff0c;裁剪&#xff0c;然后加圆角&#xff0c; 唱片和底图是两个图片&#xff0c;点击播放&#xff0c;唱片在旋转。 主要是播放按钮和停止按钮&#xff0c;两个动态面板…