引言
随着大数据和人工智能技术的发展,向量相似度搜索成为许多应用场景中的关键技术,如推荐系统、图像识别和自然语言处理等。Milvus 是一个开源的向量相似度搜索引擎,专为大规模向量数据设计,支持多种距离度量方式,能够高效地进行向量检索。本文将介绍如何使用 Node.js 客户端与 Milvus 向量数据库集成,实现从创建数据库到执行向量搜索的完整流程。
环境准备
在开始之前,请确保已经安装了 Node.js 和 npm。此外,还需要安装 Milvus 服务,并获取相应的 IP 地址、端口号、用户名和密码。本示例基于 Milvus v2.2.9 版本。
安装依赖
首先,需要安装 @zilliz/milvus2-sdk-node
包,这是官方提供的 Node.js SDK:
bash
npm install @zilliz/milvus2-sdk-no
编写代码
初始化客户端
typescript
import { MilvusClient, DataType, InsertReq } from '@zilliz/milvus2-sdk-node';
import { vectorsData, searchData } from './data';
const COLLECTION_NAME = 'example_collection';
const databaseName = '向量库名';
(async () => {
const milvusClient = new MilvusClient({
address: 'your ip:port',
username: '用户名',
password: '密码',
});
console.log('Node client is initialized.');
});
创建数据库
typescript
// 创建数据库
// const createDb = await milvusClient.createDatabase({ db_name: databaseName });
// console.log('Database is created', createDb);
// 使用数据库
const useDb = await milvusClient.use({ db_name: 'fe_common_hotdata' });
console.log('new Database is using', useDb);
创建集合
typescript
// 创建集合
const create = await milvusClient.createCollection({
collection_name: COLLECTION_NAME,
fields: [
{
name: 'id',
description: 'ID field',
data_type: DataType.Int64,
is_primary_key: true,
autoID: true,
},
{
name: 'vector',
description: 'Vector field',
data_type: DataType.FloatVector,
dim: 1536,
},
],
});
console.log('Create collection is finished.', create);
插入数据
typescript
const params: InsertReq = {
collection_name: COLLECTION_NAME,
fields_data: vectorsData,
};
// 插入数据
await milvusClient.insert(params);
console.log('Data is inserted.');
创建索引
typescript
// 创建索引
const createIndex = await milvusClient.createIndex({
collection_name: COLLECTION_NAME,
field_name: 'vector',
metric_type: 'COSINE',
});
console.log('Index is created', createIndex);
加载集合
typescript
// 加载集合
const load = await milvusClient.loadCollectionSync({
collection_name: COLLECTION_NAME,
});
console.log('Collection is loaded.', load);
执行向量搜索
typescript
// 执行向量搜索
const result = await milvusClient.search({
collection_name: COLLECTION_NAME,
vector: searchData[0].vector,
metric_type: 'COSINE' // [相似性度量]
});
console.info(`Search result-----,`, result);
删除集合
typescript
// 删除集合
await milvusClient.dropCollection({
collection_name: COLLECTION_NAME,
});
相关概念
向量相似性搜索
代码中使用到了metric_type: 'COSINE' // [相似性度量]
在Milvus中,相似性度量用于测量向量之间的相似性。选择一个好的距离度量可以显著提高分类和聚类性能。根据输入数据形式,选择特定的相似性度量以获得最佳性能。
广泛用于浮点嵌入的度量包括:
- 推荐系统:通过计算用户兴趣向量之间的相似度,推荐相似的物品或内容。
- 文本分析:通过计算文档向量之间的相似度,进行文本分类、聚类和信息检索。
- 图像处理:通过计算图像特征向量之间的相似度,进行图像匹配和检索。
- 自然语言处理:通过计算词向量之间的相似度,进行语义相似度计算和情感分析。
总结
通过以上步骤,我们成功地使用 Node.js 客户端与 Milvus 向量数据库进行了集成,实现了从创建数据库、集合到插入数据、创建索引、加载集合、执行向量搜索以及删除集合的完整流程。Milvus 的高效性和灵活性使其成为处理大规模向量数据的理想选择,适用于各种需要快速、准确向量搜索的应用场景。希望本文对您有所帮助,欢迎在评论区交流讨论。
zhuanlan.zhihu.com/p/676124465
github.com/milvus-io/m… 官网demo