Milvus向量数据库node版应用

avatar

引言

随着大数据和人工智能技术的发展,向量相似度搜索成为许多应用场景中的关键技术,如推荐系统、图像识别和自然语言处理等。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中,相似性度量用于测量向量之间的相似性。选择一个好的距离度量可以显著提高分类和聚类性能。根据输入数据形式,选择特定的相似性度量以获得最佳性能。
广泛用于浮点嵌入的度量包括:

  • 欧几里得距离(L2):该度量通常用于计算机视觉(CV)领域。
  • 内积(IP):该度量通常用于自然语言处理(NLP)领域。
  • 余弦相似度 Cosine similarity (COSINE),用于领域:
  1. 推荐系统:通过计算用户兴趣向量之间的相似度,推荐相似的物品或内容。
  2. 文本分析:通过计算文档向量之间的相似度,进行文本分类、聚类和信息检索。
  3. 图像处理:通过计算图像特征向量之间的相似度,进行图像匹配和检索。
  4. 自然语言处理:通过计算词向量之间的相似度,进行语义相似度计算和情感分析。

总结

通过以上步骤,我们成功地使用 Node.js 客户端与 Milvus 向量数据库进行了集成,实现了从创建数据库、集合到插入数据、创建索引、加载集合、执行向量搜索以及删除集合的完整流程。Milvus 的高效性和灵活性使其成为处理大规模向量数据的理想选择,适用于各种需要快速、准确向量搜索的应用场景。希望本文对您有所帮助,欢迎在评论区交流讨论。

zhuanlan.zhihu.com/p/676124465

github.com/milvus-io/m… 官网demo