跳到主要内容
版本:V1.1.0

通过 SQL 快速体验向量搜索

seekdb 支持通过 SDK 或者 SQL 方式使用。本文介绍如何通过 SQL 快速体验向量搜索。

信息

有关通过 SDK 使用 seekdb 的介绍,参见 通过 Python SDK 体验嵌入式 seekdb

在本示例中,我们将进行以下操作:

  1. 部署服务器模式 seekdb。
  2. 连接到 seekdb。
  3. 创建数据库。
  4. 创建表并插入数据。
  5. 执行向量搜索。
  6. 清理环境。

部署模式

seekdb 提供了多种灵活的部署模式,从快速原型开发到支撑海量用户,全面满足您的应用需求。

  • 嵌入式模式

    seekdb 以轻量级库的形式嵌入您的应用,支持 pip 一键安装。适用于个人学习、快速原型开发,并可高效运行于多种端侧设备。

  • 服务器模式

    推荐用于测试及生产环境的部署模式,轻量易用,适合稳定高效地提供服务。

信息

关于 seekdb 更详细和更全面的部署方式,参见 部署概述

步骤一:部署服务器模式 seekdb

前提条件

  • 您使用的环境是 RPM 平台系统,目前已验证支持的系统如下。

    • Anolis OS 8.X 版本(内核 Linux 4.19 版本及以上)

    • Anolis OS 23.X 版本(内核 Linux 6.6 版本及以上)

    • Centos Linux 7.X、9.X 版本(内核 Linux 4.19 版本及以上)

    • openEuler 22.03 和 24.03 版本(内核 Linux 5.10.0 版本及以上)

  • 当前环境中 CPU 最低要求 1 核。

  • 当前环境中的可用内存最低要求 2G。

  • 您环境中已安装 MySQL 客户端。

  • 您使用的用户已具有执行 sudo 命令的权限。

  • 您环境中已安装 jq 命令行工具,并正确配置了 systemd 作为系统和服务管理器。

快速部署 seekdb 环境

  1. 安装 seekdb。

    curl -fsSL https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/seekdb/seekdb_install.sh | sudo bash
  2. 启动 seekdb。

    sudo systemctl start seekdb
  3. 查看 seekdb 的启动状态。

    sudo systemctl status seekdb

    当状态显示为 Service is ready 时,表示 seekdb 已正常启动。

步骤二:连接 seekdb

使用 MySQL 客户端连接 seekdb,具体连接命令如下:

mysql -h127.0.0.1 -uroot -P2881 -p****** -A

步骤三:创建数据库

创建名为 my_test 的数据库。您也可以选择使用 seekdb 的默认数据库 test 进行体验。

  1. 创建数据库。

    create database my_test;
  2. 切换到自定义数据库。

    use my_test;

步骤四:创建示例表并插入数据

  1. 创建向量列和索引

    创建表时,可以使用 VECTOR(dim) 数据类型声明指定列为向量列及其维度。向量索引需要创建在向量列上,且至少需要提供 typedistance 两个参数。

    示例中创建向量列 embedding,向量数据维度为 3,并在 embedding 列上创建 HNSW 索引,指定距离算法为 L2。

    CREATE TABLE t1(
    id INT PRIMARY KEY,
    doc VARCHAR(200),
    embedding VECTOR(3),
    VECTOR INDEX idx1(embedding) WITH (distance=L2, type=hnsw)
    );
  2. 插入数据。

    INSERT INTO t1
    VALUES (1, '苹果', '[1.2,0.7,1.1]'),
    (2, '香蕉', '[0.6,1.2,0.8]'),
    (3, '橙子','[1.1,1.1,0.9]'),
    (4, '胡萝卜', '[5.3,4.8,5.4]'),
    (5, '菠菜', '[4.9,5.3,4.8]'),
    (6, '西红柿','[5.2,4.9,5.1]');

步骤五:执行向量搜索

进行向量搜索需要提供向量作为搜索条件。假设我们需要找到所有 '水果',其对应的向量为 [0.9, 1.0, 0.9],则对应 SQL 为:

SELECT id, doc FROM t1
ORDER BY l2_distance(embedding, '[0.9, 1.0, 0.9]')
APPROXIMATE LIMIT 3;

预期返回结果如下:

+----+--------+
| id | doc |
+----+--------+
| 3 | 橙子 |
| 2 | 香蕉 |
| 1 | 苹果 |
+----+--------+
3 rows in set

步骤六:清理环境

如果您不再需要上述示例数据库和表,可以执行以下操作删除。

  1. 删除示例表。

    DROP TABLE t1;
  2. 删除自定义数据库。

    DROP DATABASE my_test;

更多操作

您可以进一步体验 seekdb 的 AI Native 特性以及尝试基于 seekdb 搭建 AI 应用: