前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >疯狂SQL转换系列- SQL for Milvus

疯狂SQL转换系列- SQL for Milvus

原创
作者头像
colorknight
发布2023-05-07 23:35:58
5050
发布2023-05-07 23:35:58
举报
文章被收录于专栏:Tripod

众所周知,邮件、图片、音频、视频等非结构化数据已占据了我们日常生活数据总量的80%以上。如果想要使用计算机来处理这些数据,需要使用embedding技术将它们转化为向量。Milvus作为一款开源的向量数据库,可存储这些向量,并提供基于向量的索引及检索服务。Milvus提供了一套类SQL的数据检索API,方便使用者通过这些API检索数据。由于它与SQL语法间仍有差别,且必须通过编程的方式才能获取数据,使用起来仍不够方便。

为了能让使用者以类似访问关系数据库的交互体验访问Milvus向量数据库。MOQL Transx继续秉承能SQL化检索数据库就SQL化检索数据库的宗旨。为用户提供了一套可以检索Milvus向量数据库的SQL语法,并提供了检索接口。使用者可通过该接口输入SQL语句,获得结构化的数据结果,如下列代码示例:

代码语言:javascript
复制
// 构建Milvus客户端
MilvusServiceClient milvusClient = new MilvusServiceClient(ConnectParam.newBuilder()
            .withHost("172.31.179.128")
            .withPort(19530)
            .build();
// 使用Milvus客户端创建Milvus查询器
MilvusQuerier milvusQuerier = new MilvusQuerier(milvusClient);
/* 查询语句含义:从book集合中筛选数据,并返回col1,col2两个列。筛选条件为,当数据的col3列值为4,col4列值为'a','b','c'中的任意一
 个,且vec向量字段采用'L2'类型匹配,值为'[[1.0, 2.0, 3.0],[1.1,2.1,3.1]]'。另外,采用强一致性级别在10个单元内进行检索,取第11到第15,5条命中记录。*/
String sql = "select col1, col2 from book where col3 = 4 and vMatch(vec, 'L2', '[[1.0, 2.0, 3.0],[1.1,2.1,3.1]]') and col4 in ('a', 'b', 'c') and consistencyLevel('STRONG') and nProbe(10) limit 10,5";
// 使用查询器执行sql语句,并返回查询结果
RecordSet recordSet = milvusQuerier.query(sql);

也可以使用MilvusQuerier将SQL语句翻译为SearchParam,然后调用MilvusServiceClient.search方法进获取查询结果,如列下代码所示:

代码语言:javascript
复制
MilvusQuerier milvusQuerier = new MilvusQuerier();
String sql = "select col1, col2 from book where col3 = 4 and vMatch(vec, 'L2', '[[1.0, 2.0, 3.0],[1.1,2.1,3.1]]') and col4 in ('a', 'b', 'c') and consistencyLevel('STRONG') and nProbe(10) limit 10,5";
// 将SQL语句翻译为SearchParam
SearchParam searchParam = milvusQuerier.buildSearchParam(sql);
// 调用MilvusServiceClient.search接口获得查询结果
R<SearchResults> respSearch = milvusClient.search(searchParam);

Milvus提供的检索接口与SQL语法有一定差异,其SearchParam提供的部分参数可以直接映射为SQL语法的等同语义子句。如:expr参数,其语义与SQL中Where子句语义基本兼容;其OutFields参数为输出结果集的列结构,与SQL语句的Select子句语义相同。但其也有其特殊的查询参数接口,如:针对向量字段匹配的参数接口withVectors、withVectorFieldName;表示匹配一致性级别的withConsistencyLevel接口等。由于这些概念在SQL中没有对应语义的子句,为不增加语法概念,MOQL Transx将这类接口都以Where子句中的函数形式进行表达。这种表达方式可能不是最佳表达方式,如果有人有更好的建议,可以到项目中给我们留言,项目地址:https://github.com/colorknight/moql-transx/tree/master/moql-querier-milvus。chengdan

下表将给出Milvus查询接口的参数与SQL语法的对照关系:

Milvus查询参数接口

SQL语法

withCollectionName(table)

from table

withOutFields(outFields)

select outFields

withExpr(expr)

where expr

withVectorFieldName,withMetricType,withVectors

vMatch(fieldName, metricType, vectors)

withConsistencyLevel

consistencyLevel(['STRONG'|'BOUNDED'|'Eventually'])

withTopK(k)

limit offset, k

withParams:nProbe

nProbe(long)

withParams:ef

ef(long)

withParams:search_k

searchK(long)

withPartitionNames

partitionBy(String[])

withRoundDecimal

roundDecimal(int)

withTravelTimestamp

travelTimestamp(long)

写在最后,我们如此疯狂的为各种数据库提供基于SQL访问的接口,主要是为了降低用户使用各类数据库进行数据检索时的学习成本。我们做了一款低代码数据科学平台,可以提供对存在在各类数据存储系统中的数据进行读取,处理,分析及写入功能。我们也在寻找有这方面使用需求的伙伴能够试用平台并给出意见。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
向量数据库
腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档