一篇文章带你学会向量数据库Milvus(二)

上一篇文章 [一篇文章带你学会向量数据库Milvus(一)]我们我们学习了 Milvus 向量数据库的数据库管理,集合管理,schema 管理。这一篇文章我们继续学习向量数据库的其他内容。

索引管理

Milvus 提供多种索引类型来对字段值进行排序,以实现高效的相似性搜索。它还提供三种度量类型:余弦相似度 (COSINE)、欧几里得距离 (L2) 和内积 (IP)来测量向量嵌入之间的距离。

建议对经常使用的向量字段和标量字段创建索引

如果集合创建请求中指定了以下任一条件,Milvus 在创建集合时会自动生成索引并将其加载到内存中:

  • 向量的维度和类型
  • schema 和索引参数

下面的代码片段重新调整了现有代码的用途,以建立与 Milvus 实例的连接并创建一个集合,而无需指定其索引参数。在这种情况下,集合缺少索引并且保持卸载状态。

ini复制代码 from pymilvus import MilvusClient, DataType
 
 # 实例化客户端,连接 Milvus 服务
 client = MilvusClient(
     uri="http://localhost:19530"
 )
 
 # 创建 schema
 schema = MilvusClient.create_schema(
     auto_id=False,
     enable_dynamic_field=True,
 )
 
 # schema 添加字段 id、vector
 schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
 schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)
 
 # 创建集合
 client.create_collection(
     collection_name="demo_v4", 
     schema=schema, 
 )

集合索引

要为集合创建索引或为集合建立索引,我们需要设置索引参数并调用create_index()

ini复制代码 # 设置索引的参数
 index_params = MilvusClient.prepare_index_params()
 
 # 在向量字段 vector 上面添加一个索引
 index_params.add_index(
     field_name="vector",
     metric_type="COSINE",
     index_type=,
     index_name="vector_index"
 )
 
 # 在集合demo_v4创建索引文件
 client.create_index(
     collection_name="demo_v4",
     index_params=index_params
 )

Milvus 目前只支持为集合的每个字段创建一个索引文件

查看索引详细信息

创建索引后我们可以检索索引的详细信息:

ini复制代码 res = client.list_indexes(
     collection_name="demo_v4"
 )
 
 # Output
 #
 # [
 #     "vector_index",
 # ]
 
 res = client.describe_index(
     collection_name="demo_v4",
     index_name="vector_index"
 )
 
 # Output
 #
 # {
 #     "index_type": ,
 #     "metric_type": "COSINE",
 #     "field_name": "vector",
 #     "index_name": "vector_index"
 # }

我们可以查看针对特定字段创建的索引文件,并统计使用该索引简历的索引行数。类比 关系性数据库的索引。

删除索引

如果不在需要索引,我们可以删除相关的索引

ini复制代码 client.drop_index(
     collection_name="demo_v4",
     index_name="vector_index"
 )

检索标量字段

什么是标量字段?变量字段就是除 vector 字段,id 字段之外的字段。在 Milvus 中,标量索引用于加速特定非向量字段值的元过滤,类似于传统的数据库索引。

变量索引类型

  • auto-index Milvus 根据标量字段的数据类型自动决定索引类型。这适用于不需要控制具体索引类型的情况。
  • custom-index 可以指定明确的索引类型,比如倒排索引。这就提供了对索引的类型的更多选择。
Auto index 自动索引

要使用自动索引,请省略 index_type 参数,以便 Milvus 可以根据标量字段类型推断索引类型。

例子:

ini复制代码 # Auto indexing
 client = MilvusClient(
     uri="http://localhost:19530"
 )
 #准备一个空的IndexParams对象,无需指定任何索引参数。
 index_params = client.create_index_params() 
 
 index_params.add_index(
     field_name="scalar_1", # 要索引的标量字段的名称
     index_type="", # 要创建的索引类型。对于自动索引,请将其留空或省略此参数。
     index_name="default_index" # 要创建的指数名称
 )
 
 # 在集合中添加索引
 client.create_index(
   collection_name="demo_v4", # 指定集合名称
   index_params=index_params
 )
自定义索引

如果我们要使用自定义索引,请在 index_type 参数中指定特定索引类型。

看下面的例子:

ini复制代码 index_params = client.create_index_params() #  准备一个 IndexParams 对象
 
 index_params.add_index(
     field_name="scalar_2", # 标量字段名称
     index_type="INVERTED", # 明确索引类型
     index_name="inverted_index" # 索引的名称
 )
 
 client.create_index(
   collection_name="demo_v4", # 将索引添加到集合中
   index_params=index_params
 )
对于自定义索引,有效值为:
  • INVERTED:(推荐)倒排索引由术语词典组成,其中包含按字母顺序排序的所有标记化单词。有关详细信息,请参阅标量索引。
  • STL_SORT:使用标准模板库排序算法对标量字段进行排序。支持布尔和数字字段(例如 INT8、INT16、INT32、INT64、FLOAT、DOUBLE)。
  • Trie:用于快速前缀搜索和检索的树形数据结构。支持 VARCHAR 字段。

索引检索

使用 list_indexes() 方法验证标量索引的创建:

ini复制代码 client.list_indexes(
     collection_name="demo_v4"  # 指定集合名称
 )
 
 # Output:
 # ['default_index','inverted_index']

索引限制

目前,标量索引支持 INT8INT16INT32INT64FLOATDOUBLEBOOLVARCHAR 数据类型,但不支持 JSONARRAY 类型。

数据 CRUD

在 Milvus 集合的上下文中,实体是集合中单个、可识别的实例。它代表特定类别的独特成员,无论是图书馆中的一本书、基因组中的基因还是任何其他可识别的实体。

集合中的实体共享一组通用的属性,称为schema,概述了每个实体必须遵守的结构,包括字段名称、数据类型和任何其他约束。

将实体成功插入集合中要求提供的数据应包含目标集合的所有架构定义字段。此外,仅当您启用了动态字段时,您还可以包含非架构定义的字段。

当然,下面是一个简单的Markdown格式的向量数据库的详细教程: # 向量数据库教程 ## 1. 介绍 向量数据库是一种存储和查询向量数据的数据库系统。它可以高效地处理大规模的向量数据,并提供快速的相似度搜索和近邻查询功能。本教程将介绍向量数据库的基本概念、使用方法和常见应用。 ## 2. 安装 在开始之前,您需要安装一个向量数据库系统。目前,市场上有许多向量数据库可供选择,如Milvus、Faiss和Annoy等。在本教程中,我们将使用Milvus作为示例。 您可以通过以下步骤安装Milvus: 1. 打开终端并进入您想要安装Milvus的目录。 2. 下载Milvus进制文件:`wget https://github.com/milvus-io/milvus/releases/download/v2.0.0-rc7/milvus-2.0.0-rc7-darwin.tar.gz`(根据您的操作系统选择正确的下载链接)。 3. 解压缩下载的文件:`tar -xvf milvus-2.0.0-rc7-darwin.tar.gz`。 4. 进入解压后的目录:`cd milvus-2.0.0-rc7-darwin`。 5. 启动Milvus:`./milvus run`。 ## 3. 数据录入 在向量数据库中,您需要将向量数据录入数据库以供后续查询。以下是一个示例的数据录入过程: ```python import numpy as np from milvus import Milvus, MetricType # 连接到Milvus服务器 milvus = Milvus(host='localhost', port='19530') # 创建集合 collection_name = 'my_collection' milvus.create_collection(collection_name, {'dimension': 128, 'metric_type': MetricType.L2}) # 创建向量数据 vectors = np.random.rand(100, 128).tolist() # 插入向量 status, ids = milvus.insert(collection_name=collection_name, records=vectors) # 确保插入成功 milvus.flush([collection_name]) ``` 在上述示例中,我们首先连接到Milvus服务器并创建了一个名为`my_collection`的集合。然后,我们生成了100个128维的随机向量,并将其插入到集合中。最后,我们通过调用`flush`方法确保插入操作成功。 ## 4. 相似度搜索 一旦数据被录入到向量数据库中,您可以使用相似度搜索来查找与给定查询向量最相似的向量。以下是一个示例的相似度搜索过程: ```python # 创建查询向量 query_vector = np.random.rand(1, 128).tolist() # 执行相似度搜索 status, results = milvus.search(collection_name=collection_name, query_records=query_vector, top_k=5) # 获取搜索结果 similar_ids = results[0][0]['ids'] similar_distances = results[0][0]['distances'] ``` 在上述示例中,我们首先创建了一个随机的查询向量。然后,我们调用`search`方法执行相似度搜索,设置`top_k`参数为5,表示返回与查询向量最相似的前5个结果。最后,我们从搜索结果中获取了相似向量的IDs和距离。 ## 5. 总结 向量数据库是一种用于存储和查询向量数据的强大工具。本教程介绍了向量数据库的基本概念、安装过程、数据录入方法和相似度搜索过程。希望这个教程对您有所帮助,并能够在实际应用中发挥作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值