跳到主要内容

构造器 API

写入操作

新增使用 Insert,更新使用原生 Partial Update;不再读回完整实体后覆盖未修改的字段。多页操作不保证整体提交或回滚。

删除已知主键时,返回条数可能包含不存在的主键,不能单靠返回值判断记录是否存在。按条件或向量选择后删除的行为见数据写入

分批删除时,每次取剩余数据的第一页并删除这些主键;不需要按普通字段排序,也不要一边删除一边递增页码。

写入冲突

策略Milvus 行为
默认 / Into普通 Insert,不保证以重复主键异常阻止写入
Ignore不支持,没有原子“仅在不存在时插入”的操作
UpdatePartial Upsert,更新已有实体的指定字段或插入新实体

配置见数据写入。不要用普通 Insert 的异常代替重复主键检查。

查询操作

支持字段选择、实体和 Map 结果、标量读取及 COUNT(*)。不支持计算投影、DISTINCT 和通用 SQL 聚合。

queryForObject() 返回第一条匹配记录;没有普通字段排序保证时,不要把它当作“主键最小的一条”。需要确定记录时使用主键条件。示例见查询操作

Map 查询模式

映射 Map 使用 Java 属性名,自由 Map 使用集合字段名。例如属性 wordCount 映射到 word_count,两种模式应分别使用相应名称。

实体和字段映射见查询操作。Map 模式不会增加普通字段排序、计算列或分组能力。

分页查询

普通查询使用 LIMIT / OFFSET,总数单独查询;驱动按需读取数据。分页迭代沿用分页调用,fetchSize 控制驱动分批读取的大小,不改变页码和总条数。

普通字段不能用于排序。向量查询按距离排序,其分页方式见分页查询

条件构造器

比较、区间、IN、NULL 和 AND/OR 条件可用。包含 null 的集合应先移除 null,再使用 isNullisNotNull 明确表达空值条件。

Milvus 2.6.2 暂不支持以下参数化条件:

  • LIKE 模式参数,包括 likelikeLeftlikeRight 及其取反形式。
  • 整数参数比较外层的 NOT、重复 NOT,以及部分半开区间取反。单值排除可用 ne,区间外条件可用两侧的 OR 比较。

驱动不会改为拼接字符串来绕过参数绑定。

普通条件示例:

lambda.query(BookVector.class)
.ge(BookVector::getWordCount, 1000)
.isNotNull(BookVector::getTitle)
.queryForList();

条件参数

比较、集合、区间及 apply 的值通过 SDK 参数绑定传递;字符串中的引号无需自行拼接或转义。LIKE 模式参数暂不支持,范围见条件构造器

不要把其他数据库的 SQL 片段原样放入 apply,例如用 1=1 拼动态条件。可选条件使用 API 的布尔开关:

lambda.query(BookVector.class)
.eq(title != null, BookVector::getTitle, title)
.queryForList();

apply 中的表达式必须符合 Milvus 表达式语法

分组

当前方言不支持构造器的 groupBy 和分组聚合。普通计数使用 queryForCount();向量检索的分组搜索是另一项能力,不能代替 SQL 分组聚合。

排序

当前方言不支持普通字段的 ascdescorderBy,也不支持其空值排序策略。向量距离排序使用 orderByL2orderByCosineorderByIP,见向量操作