status
type
date
slug
summary
tags
category
icon
password
前言:
上网搜了很多教学,说实话看到的全是官话,也就是非要把一个能好好说的词说的让别人听不懂,这里特意做一个记录,如果你有mysql和java基础,相信你可以很快理解上手
📝 主旨内容
Milvus术语详解
Collection(集合)
- MySQL中的类比:数据库中的表(Table)
- Milvus中的定义:在Milvus中,
Collection是数据的基本单位,类似于MySQL中的表。每个Collection包含一组具有相同结构的数据记录。这些数据记录在Milvus中被称为Entity。
Entity(实体)
- MySQL中的类比:表中的行(Row)或记录(Record)
- Milvus中的定义:
Entity代表Collection中的单个数据项。就像MySQL中的一行数据包含了多个字段的值一样,一个Entity也包含了一组字段的值,这些值定义了该实体的特征。
Field(字段)
- MySQL中的类比:表中的列(Column)
- Milvus中的定义:
Field定义了Entity中的数据属性。每个Field都有一个类型,例如整数、浮点数或向量等。这与MySQL中定义列的数据类型非常相似。
Partition(分区)
- MySQL中的类比:表分区(Table Partitioning)
- Milvus中的定义:
Partition是一种逻辑划分,用于将Collection中的数据按照一定的规则分割成多个部分。这有助于提高查询效率,尤其是在处理大量数据时。这类似于MySQL中的表分区功能,可以根据特定条件(如日期范围)将数据分成不同的物理部分。
Segment(段)
- MySQL中的类比:没有直接对应的MySQL概念,但可以类比为存储引擎层面对数据的物理组织方式
- Milvus中的定义:
Segment是在物理存储层面的概念,它表示Partition中的一部分数据。当数据写入Partition时,Milvus会自动将其划分为多个Segment进行存储。这样做是为了优化读取性能和管理大规模数据集。
Sharding(分片)
- MySQL中的类比:水平分片(Horizontal Sharding)
- Milvus中的定义:
Sharding是指将数据分布在多个节点上,以实现负载均衡和提高查询速度。这与MySQL中的水平分片概念类似,通过将数据分散到不同的服务器上来提高系统的可扩展性和性能。
索引
- MySQL中的类比:索引(Index)
- Milvus中的定义:在Milvus中,创建索引是为了加速对
Collection中数据的搜索操作。虽然Milvus中的索引通常针对的是向量数据,但是其目的与MySQL中创建索引来加快查询速度的目的是一样的。通过索引,可以显著减少搜索所需的时间。
查询过程详解
假设你正在开发一个图像搜索应用,用户可以通过上传一张图片来查找与其相似的其他图片。
数据准备
- 数据收集:
- 收集大量的图片。
- 使用某种算法(如深度学习模型)提取每张图片的特征向量。特征向量可以看作是图片的一种数字表示,通常是一个高维向量。
- 数据格式:
- 每张图片的特征向量会被存储为一个
Entity。 - 每个
Entity可能包含以下字段: id:图片的唯一标识符。vector:图片的特征向量。metadata:其他元数据,如图片的标签、上传时间等。
- 创建Collection:
- 在Milvus中创建一个
Collection来存储这些Entity。 - 定义
Collection的结构,包括各个字段的名称和类型。
插入数据
- 插入Entity:
- 将每张图片的特征向量和其他元数据作为一个
Entity插入到Collection中。 - 例如,插入一个
Entity可能如下所示:
创建索引
- 创建索引:
- 为了加速相似性搜索,需要在
vector字段上创建索引。 - 选择合适的索引类型(如IVF_FLAT、HNSW等),根据你的数据特性和需求来决定。
查询数据
- 查询请求:
- 用户上传一张图片。
- 提取上传图片的特征向量。
- 使用这个特征向量作为查询条件,在
Collection中进行相似性搜索。
- 查询参数:
- 指定要返回的相似图片数量(例如,返回前10个最相似的图片)。
- 可能还需要指定其他过滤条件,如只返回某个标签的图片。
- 执行查询:
- 发送查询请求到Milvus。
- Milvus会根据索引快速找到最相似的图片。
获取结果
- 结果格式:
- 查询结果通常是一个列表,每个元素包含一个相似的
Entity。 - 例如,查询结果可能如下所示:
- 处理结果:
- 根据返回的
Entity信息,展示给用户相似的图片。 - 例如,可以在前端显示每张相似图片的缩略图和相关信息(如标签、上传时间等)。
总结
- 输入:用户上传一张图片,系统提取其特征向量。
- 处理:在Milvus中进行相似性搜索,返回最相似的图片。
- 输出:返回一个包含相似图片的列表,每个图片包含其特征向量和元数据。
🤗 问答
Q-它的返回值不是图片啊?我们该如何去获取呢
Milvus 返回的结果中并不直接包含图片文件,而是包含了一些元数据和特征向量。你需要通过这些元数据来获取实际的图片文件。以下是一个具体的步骤来说明如何通过Milvus的返回值获取图片:
1. 数据准备阶段
在数据准备阶段,除了将图片的特征向量存储到Milvus中,还需要保存图片的实际文件路径或其他能够唯一标识图片的信息(如图片ID)。这些信息可以存储在另一个数据库中,例如MySQL或MongoDB。
示例数据结构
假设你有一个MySQL表来存储图片的元数据:
在Milvus中,
Entity的结构可能如下:2. 插入数据
当你插入数据到Milvus时,同时将图片的文件路径和其他元数据插入到MySQL中:
3. 查询数据
当用户上传一张图片并进行相似性搜索时,Milvus会返回最相似的图片的
Entity信息。你可以从这些Entity中提取出图片的ID,然后使用这些ID从MySQL中查询图片的文件路径。示例查询代码
4. 显示图片
最后,你可以使用这些文件路径来加载和显示图片。例如,在Web应用中,你可以将这些文件路径传递给前端,前端再通过这些路径加载和显示图片。
前端示例
通过上述步骤,你可以从Milvus的查询结果中获取图片的实际文件路径
📎 实战:长文本查询相似语句
欢迎交流~
- Author:DreamEutopia
- URL:https://tangly1024.com/article/milvus-base
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
.png?table=block&id=22ce89e3-fd19-81f8-8f19-e7f1ff0a7d44&t=22ce89e3-fd19-81f8-8f19-e7f1ff0a7d44)
.png?table=block&id=22ce89e3-fd19-8118-9213-c8042b8e56e3&t=22ce89e3-fd19-8118-9213-c8042b8e56e3)




.png?table=block&id=22ce89e3-fd19-8199-ab67-ea17b93a0dd3&t=22ce89e3-fd19-8199-ab67-ea17b93a0dd3)

.png?table=block&id=22ce89e3-fd19-81c5-8465-e4bf4fbff519&t=22ce89e3-fd19-81c5-8465-e4bf4fbff519)
.png?table=block&id=22ce89e3-fd19-819d-9d25-c92c6f55d67e&t=22ce89e3-fd19-819d-9d25-c92c6f55d67e)
