跳转到正文

连接 Milvus

Milvus 是用于大容量向量搜索的外部向量数据库。适用于组织已在运营 Milvus,或搜索数据非常多、需要用单独集群管理的情况。

即使使用 Milvus,原始文件和文档文本仍保留在 SpaceBuilder 中。Milvus 中只存储搜索所需的向量和最少量的信息。


开始之前

  • 所需权限:Workspace 管理员,以及管理 Milvus 集合的权限
  • SpaceBuilder 服务器必须能够访问 Milvus 端点。
  • 确认要使用的嵌入模型的输出维度。

安装 Milvus

SpaceBuilder 使用 Milvus 2.4 及以上版本的 REST API(v2,默认端口 19530)。所有请求都发送到 /v2/vectordb/... 路径,因此在 Milvus 2.3 及以下版本中无法运行。需要一个 SpaceBuilder 服务器能够通过此端口访问的 Milvus。如果已有正在运行的 Milvus,请跳过本节,直接前往预先创建集合。

Milvus 有两种部署方式:面向单台服务器的 Standalone 和面向大规模集群的 Distributed。连接 SpaceBuilder 时,Standalone 已经足够。

准备

项目内容
服务器Linux 服务器上必须已安装 Docker。Milvus 比 Qdrant 更重,建议与 SpaceBuilder 放在不同的服务器上。
内存最少 8GB。向量超过 100 万个时,建议 16GB 以上。
磁盘数据和日志会一起存储,请预留充足的空间。建议使用 SSD。
端口19530(API)。SpaceBuilder 只使用此端口。9091 用于状态检查和管理页面。

运行

使用 Milvus 提供的安装脚本,可以用一个包含所需组件的容器来运行。

mkdir -p ~/milvus && cd ~/milvus
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh
bash standalone_embed.sh start
  • 数据保存在运行脚本的文件夹下的 volumes/milvus 中。删除此文件夹,数据将会丢失。
  • 停止或重新启动时,在同一文件夹中执行 bash standalone_embed.sh stop / bash standalone_embed.sh start。
  • 更改配置时,修改在同一文件夹中生成的 user.yaml,然后重新启动。

启用认证

如果与 SpaceBuilder 运行在不同的服务器上,或处于多人可以访问的网络中,请启用认证。在 user.yaml 中添加以下内容并重新启动。

common:
  security:
    authorizationEnabled: true

启用认证后,可以使用默认账户 root / 密码 Milvus 登录。请务必更改默认密码,并建议另外创建 SpaceBuilder 专用账户。在 SpaceBuilder 的连接设置中,可以输入 API 密钥(令牌,用户名:密码 格式)或用户名和密码。两者都输入时,使用 API 密钥。

验证安装

curl http://localhost:9091/healthz

如果返回 OK,则表示正常。在浏览器中打开 http://<Milvus 服务器地址>:9091/webui/,可以看到用于查看集合和状态的管理页面(Milvus 2.5 及以上版本)。

运维提示

  • 防火墙:请限制为只有 SpaceBuilder 服务器可以访问 19530 端口。请勿将 9091 开放到外部。
  • 备份:向量是可以从原始文件重新生成的派生数据。即使没有单独备份,也可以通过 SpaceBuilder 的 同步已有嵌入 重新填充向量数据库。
  • 更新:升级 Milvus 版本时,请遵循 Milvus 官方升级指南。次版本不同时,可能需要进行数据迁移。

预先创建集合

与 Qdrant 不同,Milvus 集合不会自动创建。 在保存连接设置之前,必须先按以下结构创建集合。

字段类型说明
idVARCHAR(64),主键向量 ID
instance_namespaceVARCHAR(64)实例隔离键。每个实例(单独安装并运行的一个 SpaceBuilder)的值各不相同。
generation_idVARCHAR(64)索引世代
chunk_idINT64文档片段编号
space_flagVARCHAR(16)团队空间(team)或个人空间(client)
owner_idVARCHAR(64)所有者
source_pathVARCHAR原始文件路径
textVARCHAR在搜索结果中显示的文档片段
vectorFLOAT_VECTOR嵌入向量。维度必须与嵌入模型一致。
  • vector 字段的维度(dim)必须与 SpaceBuilder 中设置的向量维度相同。(bge-m3 为 1024)
  • vector 字段的索引距离计算方式(metric)必须为 COSINE。
  • SpaceBuilder 会将 text 截断为 4,096 个字符后存储。在 UTF-8 中,韩文每个字符占 3 字节,表情符号占 4 字节,因此将 max_length 设为 16384(4,096 字符 × 4 字节)以上,任何文档片段都不会触及长度限制。
  • source_path 的文件路径可能较长且可能混有韩文,请预留充足的长度,设为 4096 左右。

以下是使用 Milvus REST API(v2)创建集合的命令。请根据环境修改 <Milvus 服务器地址>、认证信息、集合名称和 dim 值。

  • Authorization 中填写 <用户名>:<密码>,或在该位置填写 API 密钥(令牌)。
  • 如果未启用认证,请删除 Authorization 这一行。
curl -X POST "http://<Milvus 服务器地址>:19530/v2/vectordb/collections/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <用户名>:<密码>" \
  -d '{
    "collectionName": "setfn_knowledge_example",
    "schema": {
      "autoId": false,
      "enableDynamicField": false,
      "fields": [
        { "fieldName": "id", "dataType": "VarChar", "isPrimary": true, "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "instance_namespace", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "generation_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "chunk_id", "dataType": "Int64" },
        { "fieldName": "space_flag", "dataType": "VarChar", "elementTypeParams": { "max_length": 16 } },
        { "fieldName": "owner_id", "dataType": "VarChar", "elementTypeParams": { "max_length": 64 } },
        { "fieldName": "source_path", "dataType": "VarChar", "elementTypeParams": { "max_length": 4096 } },
        { "fieldName": "text", "dataType": "VarChar", "elementTypeParams": { "max_length": 16384 } },
        { "fieldName": "vector", "dataType": "FloatVector", "elementTypeParams": { "dim": 1024 } }
      ]
    },
    "indexParams": [
      { "fieldName": "vector", "indexName": "vector", "metricType": "COSINE", "params": { "index_type": "AUTOINDEX" } }
    ]
  }'

如果返回包含 "code":0 的响应,则表示集合已创建。

连接设置

在知识存储页面的 向量数据库设置 中按如下方式输入并保存。

项目输入值说明
驱动程序Milvus使用外部 Milvus 服务器。
端点http://<Milvus 服务器地址>:19530省略 http:// 时会自动补上。留空时使用 http://localhost:19530。
集合预先创建的集合名称建议每个实例使用不同的名称。页面上会显示此实例的建议名称(setfn_knowledge_...)。
API 密钥Milvus 令牌仅在使用令牌连接启用了认证的 Milvus 时输入。已保存的值以掩码显示,不更改则保持原样。清空后保存即删除。
用户名 / 密码Milvus 账户使用账户认证时输入。密码仅在需要更改时输入,留空则保持已保存的值。
向量维度与集合的 dim 相同的值如果不同,虽然可以连接,但索引会在存储阶段失败。

Milvus 属于服务型存储,因此不会显示 数据路径 输入框。保存后,索引调度器会检查新设置,并在需要时自动开始对全部原始文件重新索引。

验证连接

在 向量数据库概览 中查看状态。

项目正常时
连接状态已连接
集合配置正常(与当前设置兼容)
已存储的向量数随着索引的进行而增加。只统计此实例存储的向量。
集合数Milvus 服务器上的全部集合数。

状态不正常时,请检查以下内容。

显示原因与处理
未找到集合 · 请先在 Milvus 中创建尚未创建集合,或名称不一致。请按上述结构创建集合,或核对名称。
集合配置需要检查 + collection dimension is ..., expected ...集合维度与设置的向量维度不同。请创建维度一致的新集合并指定。
集合配置需要检查 + collection metric must be COSINEvector 索引的 metric 不是 COSINE。请将索引重新创建为 COSINE。

相关文档