Qdrant & Milvus
约 919 字
数据迁移
https://milvus.io/docs/zh/milvusdm_install.md ## 官方迁移工具源码安装教程
https://milvus.io/docs/zh/from-m2x.md ## 官方milvus迁移教程
/root/deploy/milvus-migration ## 42服务器项目迁移工具源代码路径
export GOPROXY=https://goproxy.cn,direct ## 环境配置 Go Modules 镜像加速国内访问
dumper:
worker:
workMode: milvus2x
reader:
bufferSize: 100
meta:
mode: config
version: 30b70b05-Gpu
collection: hr_terms
source:
milvus2x:
endpoint: 192.168.2.42:19530
target:
milvus2x:
endpoint: 192.168.2.42:29530
./milvus-migration start --config=/root/deploy/milvus-migration/migration.yaml
本地安装 Milvus
- 官网下载:
standalone_embed.sh
- 从 Docker 中拉取镜像:
docker pull milvusdb/milvus:v2.4.5
- 编辑 shell 脚本里面的 Docker 镜像地址和标签
- 把脚本放在专门运行容器挂载的文件里:
~/Volumes/milvus
cd
至目录,在其中运行bash standalone_embed.sh start
- 停止运行、删除、重启命令如下:
bash standalone_embed.sh stop
bash standalone_embed.sh delete
bash standalone_embed.sh restart
MilvusException
pymilvus.exceptions.MilvusException: <MilvusException: (code=65535, message=fail to search on QueryNode 12: worker(12) query failed: vector dimension mismatch, expected vector size(byte) 3072, actual 4096.)>
这个错误是因为向量的维度不匹配导致的。在Milvus中,当你进行向量搜索时,搜索的向量维度必须与索引中存储的向量维度一致。
错误信息中的关键部分是:
- expected vector size(byte) 3072:表示Milvus期望接收到的向量大小为3072字节。
- actual 4096:表示实际收到的向量大小为4096字节。
在向量数据库中,向量的大小通常由维度(dimension)和数据类型(例如float32, float64)决定。你的数据可能有以下问题:
- 向量维度不匹配:你插入和搜索的向量维度不一致。例如,你可能定义了一个维度为768的向量(float32类型,每个向量大小应为3072字节),但是查询时提供了一个维度为1024的向量(每个向量大小4096字节)。
- 数据类型不匹配:插入时的向量数据类型与查询时的不同。
为了解决这个问题,你需要确保:
- 插入和查询的向量维度一致。
- 数据类型一致(例如,都使用float32)。
混合搜索的优势
- 稀疏向量(如 BM25)擅长关键词匹配(全文检索),确保返回包含查询关键词的文档。
- 稠密向量擅长捕捉语义相似性,返回与查询语义相关的文档。
在实际应用中,稀疏向量和稠密向量各有优势,常常结合使用,以充分利用它们在不同方面的表达能力。例如,在混合检索中,稀疏向量用于精确匹配关键词,稠密向量用于捕捉语义相似性,从而提高搜索的准确性和覆盖范围。
TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频率)是一种常用于信息检索和文本挖掘的加权方法,它用于衡量一个词语对于一个文档在一个文档集合或语料库中的重要程度。
Qdrant id
point = PointStruct(
id=123123,
vector=embedding,
payload={"text": text, "source": 1111}
)
此 id 为 Qdrant 控制台中的 Point 123123
id 的作用
- 唯一标识向量点:id 是每个向量点的唯一标识符,确保在集合中可以准确地引用和操作特定的向量。
- 数据操作的关键:在更新、删除或查询特定向量时,id 是必要的参数。例如,若要更新某个向量的内容,需提供其对应的 id。
- 避免数据重复:在插入新向量时,若指定的 id 已存在,Qdrant 会根据操作类型决定是覆盖旧数据还是返回错误,从而防止数据重复。