通过 SQL 快速体验服务器模式 seekdb
seekdb 支持通过 SDK 或者 SQL 方式使用。本文介绍如何通过 SQL 快速体验服务器模式的 seekdb。
有关通过 SDK 使用 seekdb 的介绍,参见 通过 Python SDK 体验嵌入式 seekdb。
在本示例中,我们将进行以下操作:
- 部署服务器模式 seekdb。
- 连接到 seekdb。
- 创建数据库。
- 创建表并插入数据。
- 执行混合搜索。
- 进行搜索优化。
- 清理环境。
部署模式
seekdb 提供了多种灵活的部署模式,从快速原型开发到支撑海量用户,全面满足您的应用需求。
-
嵌入式模式
seekdb 以轻量级库的形式嵌入您的应用,支持 pip 一键安装。适用于个人学习、快速原型开发,并可高效运行于多种端侧设备。
-
服务器模式
推荐用于测试及生产环境的部署模式,轻量易用,适合稳定高效地提供服务。
关于 seekdb 更详细和更全面的部署方式,参见 部署概述。
步骤一:部署服务器模式 seekdb
前提条件
开始部署前,您需确认环境满足以下要求:
-
您使用的环境是 RPM 平台系统,目前已验证支持的系统如下。
- Anolis OS 8.X 版本(内核 Linux 3.10.0 版本及以上)
- Alibaba Cloud Linux 2/3 版本(内核 Linux 3.10.0 版本及以上)
- Red Hat Enterprise Linux Server 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)
- CentOS Linux 7.X 版本、8.X 版本(内核 Linux 3.10.0 版本及以上)
- Debian 9.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)
- Ubuntu 20.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)
- SUSE / OpenSUSE 15.X 版本及以上版本(内核 Linux 3.10.0 版本及以上)
- openEuler 22.03 和 24.03 版本(内核 Linux 5.10.0 版本及以上)
- KylinOS V10 版本
- 统信 UOS 1020a/1021a/1021e/1001c 版本
- 中科方德 NFSChina 4.0 版本及以上
- 浪潮 Inspur kos 5.8 版本
-
当前环境中 CPU 最低要求 1 核。
-
当前环境中的可用内存最低要求 2G。
-
您环境中已安装 MySQL 客户端。
-
您使用的用户已具有执行 sudo 命令的权限。
-
使用 yum install 部署需要的条件
- 您环境中已安装 jq 命令行工具,并正确配置了 systemd 作为系统和服务管理器。
-
使用 docker 部署需要的条件
- 您已安装 Docker 并启动 Docker 服务。
使用 yum install 快速部署 seekdb
-
添加 seekdb 镜像源。
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo -
安装 seekdb。
sudo yum install seekdb obclient -
启动 seekdb。
sudo systemctl start seekdb -
查看 seekdb 的启动状态。
sudo systemctl status seekdb当状态显示为
Service is ready时,表示 seekdb 已正常启动。 -
连接 seekdb。
mysql -h127.0.0.1 -uroot -P2881 -A oceanbase
快速部署 seekdb 容器环境
如果您的环境中已安装 Docker 并启动 Docker 服务,也可以使用 Docker 容器部署 seekdb。有关 docker 部署的详细信息,请参考 部署 seekdb 容器环境。
直接启动 seekdb 实例。
sudo docker run -d -p 2881:2881 oceanbase/seekdb
若拉取 Docker 镜像失败,您也可从 quay.io 或者 ghcr.io 仓库中拉取镜像,只需将上述拉取命令中的 oceanbase/seekdb 对应替换为 >quay.io/oceanbase/seekdb 或 ghcr.io/oceanbase/seekdb,如执行 sudo docker run -d -p 2881:2881 quay.io/oceanbase/seekdb 从 quay.io 中拉取镜像。
步骤二:连接 seekdb
使用 MySQL 客户端连接 seekdb,具体连接命令如下:
mysql -h127.0.0.1 -uroot -P2881 -p****** -A
步骤三:创建数据库
创建名为 my_test 的数据库。您也可以选择使用 seekdb 的默认数据库 test 进行体验。
-
创建数据库。
create database my_test; -
切换到自定义数据库。
use my_test;
步骤四:创建示例表并插入数据
-
创建一个包含标量列、向量列和全文索引列的文档表,用于演示全文搜索带标量过滤条件和混合搜索。
CREATE TABLE doc_table(
c1 INT,
vector VECTOR(3),
query VARCHAR(255),
content VARCHAR(255),
VECTOR INDEX idx1(vector) WITH (distance=l2, type=hnsw, lib=vsag),
FULLTEXT INDEX idx2(query),
FULLTEXT INDEX idx3(content)
)
ORGANIZATION HEAP; -
插入数据。
INSERT INTO doc_table VALUES
(1, '[1,2,3]', "hello world", "seekdb Elasticsearch database"),
(2, '[1,2,1]', "hello world, what is your name", "seekdb database"),
(3, '[1,1,1]', "hello world, how are you", "seekdb mysql database"),
(4, '[1,3,1]', "real world, where are you from", "postgres mysql database"),
(5, '[1,3,2]', "real world, how old are you", "redis mysql database"),
(6, '[2,1,1]', "hello world, where are you from", "starrocks seekdb database");
步骤五:执行混合搜索
-
设置搜索参数。
SET @parm = '{
"query": {
"query_string": {
"fields": ["query", "content"],
"query": "hello oceanbase"
}
},
"knn" : {
"field": "vector",
"k": 5,
"query_vector": [1,2,3]
}
}'; -
执行查询并返回查询结果。
SELECT json_pretty(DBMS_HYBRID_SEARCH.SEARCH('doc_table', @parm));返回结果如下:
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| json_pretty(DBMS_HYBRID_SEARCH.SEARCH('doc_table', @parm)) |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [
{
"c1": 1,
"query": "hello world",
"_score": 1.3716216216216217,
"vector": "[1,2,3]",
"content": "seekdb Elasticsearch database"
},
{
"c1": 2,
"query": "hello world, what is your name",
"_score": 0.6646586312048193,
"vector": "[1,2,1]",
"content": "seekdb database"
},
{
"c1": 3,
"query": "hello world, how are you",
"_score": 0.6593354613375797,
"vector": "[1,1,1]",
"content": "seekdb mysql database"
},
{
"c1": 5,
"query": "real world, how old are you",
"_score": 0.41421356,
"vector": "[1,3,2]",
"content": "redis mysql database"
},
{
"c1": 6,
"query": "hello world, where are you from",
"_score": 0.3503184713375797,
"vector": "[2,1,1]",
"content": "starrocks seekdb database"
},
{
"c1": 4,
"query": "real world, where are you from",
"_score": 0.30901699,
"vector": "[1,3,1]",
"content": "postgres mysql database"
}
] |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
步骤六:进行搜索优化
在混合搜索中,可以通过 boost 参数调整全文搜索和向量搜索的权重比例,以优化搜索结果。例如提高全文搜索的权重:
-
设置搜索参数。
SET @parm = '{
"query": {
"query_string": {
"fields": ["query", "content"],
"query": "hello oceanbase",
"boost": 2.0
}
},
"knn" : {
"field": "vector",
"k": 5,
"query_vector": [1,2,3],
"boost": 1.0
}
}'; -
执行查询并返回查询结果。
SELECT json_pretty(DBMS_HYBRID_SEARCH.SEARCH('doc_table', @parm));返回结果如下:
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| json_pretty(DBMS_HYBRID_SEARCH.SEARCH('doc_table', @parm)) |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [
{
"c1": 1,
"query": "hello world",
"_score": 1.7432432432432434,
"vector": "[1,2,3]",
"content": "seekdb Elasticsearch database"
},
{
"c1": 3,
"query": "hello world, how are you",
"_score": 1.0096539326751595,
"vector": "[1,1,1]",
"content": "seekdb mysql database"
},
{
"c1": 2,
"query": "hello world, what is your name",
"_score": 0.9959839324096386,
"vector": "[1,2,1]",
"content": "seekdb database"
},
{
"c1": 6,
"query": "hello world, where are you from",
"_score": 0.7006369426751594,
"vector": "[2,1,1]",
"content": "starrocks seekdb database"
},
{
"c1": 5,
"query": "real world, how old are you",
"_score": 0.41421356,
"vector": "[1,3,2]",
"content": "redis mysql database"
},
{
"c1": 4,
"query": "real world, where are you from",
"_score": 0.30901699,
"vector": "[1,3,1]",
"content": "postgres mysql database"
}
] |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
通过调整 boost 参数,可以控制关键词搜索和语义搜索在最终排序中的权重。例如,如果更关注关键词匹配,可以提高 query_string 的 boost 值;如果更关注语义相似性,可以提高 knn 的 boost 值。
步骤七:清理环境
如果您不再需要上述示例数据库和表,可以执行以下操作删除。
-
删除示例表。
DROP TABLE doc_table; -
删除自定义数据库。
DROP DATABASE my_test;
更多操作
您可以进一步体验 seekdb 的 AI Native 特性以及尝试基于 seekdb 搭建 AI 应用: