跳到主要内容

查询操作

通过构造器 API 或 Mapper 查询 Milvus;手写命令使用 JDBC-Milvus 的 SQL 语法。连接配置见 JDBC Milvus

查询前准备

示例使用已建立并加载的 book_vectors 集合,创建语句见准备集合。普通查询和向量检索前都需要加载集合;分页读取见分页查询

实体映射

FLOAT_VECTOR 字段可直接使用 List<Float>,列表长度须与字段维度一致。其它向量类型见类型支持

@Table("book_vectors")
public class BookVector {
@Column(value = "book_id", primary = true)
private Long bookId;
private String title;
@Column("word_count")
private Integer wordCount;
@Column("book_intro")
private List<Float> bookIntro;
// 省略 getter 和 setter
}

主键由应用赋值或由集合 AutoID 生成,见主键生成

执行查询命令

JdbcTemplate jdbc = new JdbcTemplate(dataSource);

List<BookVector> rows = jdbc.queryForList(
"SELECT * FROM book_vectors WHERE book_id = ?",
new Object[] { 1001L }, BookVector.class);

通过不同 API 查询

LambdaTemplate lambda = new LambdaTemplate(dataSource);
BookVector item = lambda.query(BookVector.class)
.eq(BookVector::getBookId, 1001L)
.queryForObject();

普通条件查询使用原生 Query,向量查询使用 Search。

向量字段映射、检索度量及标量过滤见向量操作

查询操作

支持选择字段、实体和 Map 结果、标量读取及 COUNT(*),不支持计算投影、DISTINCT 和通用 SQL 聚合。条件表达式和可选条件的写法见构造器 API

Map 查询

入口Map 键的含义
实体映射的 asMap()Java 属性名
queryFreedomMilvus 字段名
BaseMapper 的 Map 查询方法已注册实体的属性名

Map 写入及 NULL 属性的处理见Map 写入

向量查询

向量字段映射、检索度量及标量过滤见向量操作

查询执行选项

Mapper 文件可配置 statementTypetimeoutfetchSize,具体效果遵循驱动配置。resultSetType 保持 DEFAULT 或使用 FORWARD_ONLY,不支持 SCROLL_INSENSITIVESCROLL_SENSITIVE 滚动结果集。XML 配置见执行选项

查询结果列的说明见读取结果