![13c1ad28ae1c49c3ea2a3f3cd7cc4601.png](https://i-blog.csdnimg.cn/blog_migrate/6a54ff51b49a0a0ac3d80252385b046f.jpeg)
通过深度学习的神经网络模型,可以将图片、视频、语音、还有文本等非结构化数据转换为特征向量。除了结构化的向量,这些数据往往也需添加其他属性。如人脸图片,可以添加性别、是否戴眼镜、图片抓取时间等标签;文本可以添加语言类型、语料分类、文本创建时间等标签。由于这些特性,往往需要实现结构化数据和非结构化数据的混合查询。
Milvus 是一款开源的、针对海量特征向量的相似性搜索引擎,在此之前,Milvus 曾给出过一个结合PostgreSQL实现混合查询的方案。该方案是先将特征向量在 Milvus 内做相似度检索,然后 Milvus 返回的结果集再通过 PostgreSQL 过滤结构化属性,得到最终结果。由于是先做向量的相似度检索,然后再从相似度搜索得出的结果中筛选满足属性条件的结果,可能会造成结果集有损失,因为满足属性的一些结果集可能在向量相似度检索时已经被过滤掉了,而相似度靠前的向量集却不满足附加的属性条件。
得益于 Milvus 0.6.0 新增的分区功能,上述问题在 Milvus 0.6.0 有了新的解决方案,同时 Milvus 的应用场景也更加广阔( Milvus 分区功能详解: Milvus 0.6.0新增功能:分区表)。那么,Milvus 分区功能是如何来解决混合查询的问题呢?
解决方案
将非结构化数据对应的多个属性标签组合为一个字符串作为 Milvus 一个分区的标签,特征向量将按分区存储,