Row 操作
插入记录
功能介绍
将一条或者一批记录插入到指定的表中。插入语义为Insert,若记录的主键已存在,则插入失败并报错。当插入一批时,该接口暂不支持批次的原子性。
请求示例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.entity.Row;
import com.baidu.mochow.model.entity.RowField;
import com.baidu.mochow.model.InsertRequest;
import com.baidu.mochow.model.InsertResponse;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
List<Row> rows = new ArrayList<Row>();
rows.add(Row.builder()
.addField(new RowField("id", "0001"))
.addField(new RowField("vector", Arrays.asList(1, 0.21, 0.213, 0)))
.addField(new RowField("bookName", "西游记"))
.addField(new RowField("author", "吴承恩"))
.addField(new RowField("page", 21))
.addField(new RowField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build()
);
InsertRequest insertRequest = InsertRequest.builder().database(databaseName).table(tableName).rows(rows).build();
InsertResponse insertResponse = mochowClient.insert(insertRequest);
System.out.printf("Insert affected count:%d\n", insertResponse.getAffectedCount());
}
}
相关类说明
InsertRequest
插入请求,用于往向量数据库插入数据,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
import com.baidu.mochow.model.InsertRequest; //导入包
成员名 | 类型 | 是否必填 | 成员含义 |
---|---|---|---|
database | String | 是 | 插入数据的库名 |
table | String | 是 | 插入数据的表名 |
rows | List<Row> | 是 | 插入的记录列表 |
Row
行数据,可用builder快速构建
import com.baidu.mochow.model.entity.Row; //导入包
成员名 | 类型 | 成员含义 |
---|---|---|
fields | Map<String, Object> | 存储一行数据,key为插入的字段名,value为值 |
可以使用Row.builder()获取Row的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
addField | RowField | 无 | 为行增加一个字段值 |
RowField
字段以及值的复合体,成员如下,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
成员名 | 类型 | 成员含义 |
---|---|---|
name | String | 字段名 |
value | String | 值 |
InsertResponse
插入回复,向量数据库向客户端返回插入请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.InsertResponse; //导入包
成员名 | 类型 | 成员含义 |
---|---|---|
affectedCount | int | 插入请求影响的数据库行数 |
插入或更新记录
功能介绍
将一条或者一批记录插入到指定的表中。插入语义为Upsert(Insert or else Update),即,当记录的主键不存在时,则正常插入,若发现主键已存在,则用新的记录覆盖旧的记录。当插入一批时,该接口暂不支持批次的原子性。该接口可用于批量迁移/灌库等场景。
请求示例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.entity.Row;
import com.baidu.mochow.model.entity.RowField;
import com.baidu.mochow.model.UpsertRequest;
import com.baidu.mochow.model.UpsertResponse;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
List<Row> rows = new ArrayList<Row>();
rows.add(Row.builder()
.addField(new RowField("id", "0001"))
.addField(new RowField("vector", Arrays.asList(1, 0.21, 0.213, 0)))
.addField(new RowField("bookName", "西游记"))
.addField(new RowField("author", "吴承恩"))
.addField(new RowField("page", 21))
.addField(new RowField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build()
);
UpsertRequest upsertRequest = UpsertRequest.builder().database(databaseName).table(tableName).rows(rows).build();
UpsertResponse upsertResponse = mochowClient.upsert(upsertRequest);
System.out.printf("Upsert affected count:%d\n", upsertResponse.getAffectedCount());
}
}
相关类说明
UpsertRequest
插入或更新请求,用于往向量数据库插入或更新数据,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
import com.baidu.mochow.model.UpsertRequest; //导入包
成员名 | 类型 | 是否必填 | 成员含义 |
---|---|---|---|
database | String | 是 | 插入数据的库名 |
table | String | 是 | 插入数据的表名 |
rows | List<Row> | 是 | 插入的记录列表 |
Row
行数据,可用builder快速构建
import com.baidu.mochow.model.entity.Row; //导入包
成员名 | 类型 | 参数含义 |
---|---|---|
fields | Map<String, Object> | 存储一行数据,key为插入的字段名,value为值 |
可以使用Row.builder()获取Row的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
addField | RowField | 无 | 为行增加一个字段值 |
RowField
字段以及值的复合体,成员如下,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
成员名 | 类型 | 成员含义 |
---|---|---|
name | String | 字段名 |
value | String | 值 |
UpsertResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.UpsertResponse; //导入包
成员名 | 类型 | 参数含义 |
---|---|---|
affectedCount | int | 插入或更新请求影响的数据库行数 |
更新记录
功能介绍
更新表中指定记录的一个或多个标量字段的值
请求示例
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
UpdateRequest updateRequest = UpdateRequest.builder()
.database(databaseName)
.table(tableName)
.addPrimaryKey("id", "0001")
.addUpdate("bookName", "红楼梦")
.addUpdate("author", "曹雪芹")
.addUpdate("page", 21)
.addUpdate("segment", "满纸荒唐言,一把辛酸泪").build();
mochowClient.update(updateRequest);
}
}
相关类说明
UpdateRequest
更新请求,用于往向量数据库更新数据,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.UpdateRequest; //导入包
成员名 | 类型 | 是否必选 | 成员含义 |
---|---|---|---|
database | String | 是 | 插入数据的库名 |
table | String | 是 | 插入数据的表名 |
primaryKey | GeneralParams | 是 | 指定记录的主键值。 |
partitionKey | GeneralParams | 否 | 指定记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。 |
update | GeneralParams | 是 | 待更新的字段列表及其新值。 不允许更新主键、分区键和向量字段。 |
可以使用UpdateRequest.builder()获取UpdateRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置UpdateRequest的database |
table | String | 无 | 设置UpdateRequest的table |
primaryKey | GeneralParams | 无 | 设置UpdateRequest的primaryKey |
addPrimaryKey | String, Object | 无 | 为UpdateRequest增加一个primaryKey |
partitionKey | GeneralParams | 无 | 设置UpdateRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为UpdateRequest增加一个partitionKey |
update | GeneralParams | 无 | 设置UpdateRequest的update |
addUpdate | String, Object | 无 | 为UpdateRequest增加一个update |
build | 无 | UpdateRequest | 返回一个构建好的UpdateRequest |
删除记录
功能介绍
删除表中的指定记录。
请求示例
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.DeleteRequest;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
DeleteRequest deleteRequest = DeleteRequest.builder()
.database(databaseName)
.table(tableName)
.addPrimaryKey("id", "0001")
.build();
mochowClient.delete(deleteRequest);
}
}
相关类说明
DeleteRequest
删除,用于往向量数据库删除数据,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.DeleteRequest; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
database | String | 是 | 删除数据的库名 |
table | String | 是 | 删除数据的表名 |
filter | String | 否 | 删除的标量过滤条件。 当要删除全部记录,可设置为"*";Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。必须填写主键值或过滤条件,二者有且仅能选其一。 |
primaryKey | GeneralParams | 否 | 指定记录的主键值。 |
partitionKey | GeneralParams | 否 | 指定记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。 |
可以使用UpdateRequest.builder()获取UpdateRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置DeleteRequest的database |
table | String | 无 | 设置DeleteRequest的table |
primaryKey | GeneralParams | 无 | 设置DeleteRequest的primaryKey |
addPrimaryKey | String, Object | 无 | 为DeleteRequest增加一个primaryKey |
partitionKey | GeneralParams | 无 | 设置DeleteRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为DeleteRequest增加一个partitionKey |
filter | GeneralParams | 无 | 设置DeleteRequest的filter |
build | 无 | DeleteRequest | 返回一个构建好的DeleteRequest |
标量查询
功能介绍
基于主键值进行点查。
请求示例
import java.util.Arrays;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.QueryRequest;
import com.baidu.mochow.model.QueryResponse;
import com.baidu.mochow.util.JsonUtils;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
QueryRequest queryRequest = QueryRequest.builder()
.database(databaseName)
.table(tableName)
.retrieveVector(true)
.addPrimaryKey("id", "0005")
.projections(Arrays.asList("id", "bookName")).build();
QueryResponse queryResponse = mochowClient.query(queryRequest);
System.out.printf("Query result: %s\n", JsonUtils.toJsonString(queryResponse.getRow()));
}
}
相关类说明
QueryRequest
标量查询,基于主键值进行点查,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.QueryRequest; //导入包
成员名 | 类型 | 是否必选 | 成员说明 |
---|---|---|---|
database | String | 是 | 查询数据的库名 |
table | String | 是 | 查询数据的表名 |
primaryKey | GeneralParams | 是 | 指定记录的主键值。 |
projections | List<String> | 否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
partitionKey | GeneralParams | 否 | 指定记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。 |
retrieveVector | Boolean | 否 | 是否返回结果记录中的向量字段值,默认为False |
readConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: |
可以使用UpdateRequest.builder()获取UpdateRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置QueryRequest的database |
table | String | 无 | 设置QueryRequest的table |
primaryKey | GeneralParams | 无 | 设置QueryRequest的primaryKey |
addPrimaryKey | String, Object | 无 | 为QueryRequest增加一个primaryKey |
partitionKey | GeneralParams | 无 | 设置QueryRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为QueryRequest增加一个partitionKey |
projections | List<String> | 无 | 设置QueryRequest的projections |
retrieveVector | Boolean | 无 | 设置QueryRequest的retrieveVector |
readConsistency | ReadConsistency | 无 | 设置QueryRequest的readConsistency |
build | 无 | DeleteRequest | 返回一个构建好的DeleteRequest |
QueryResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.QueryResponse; //导入包
成员名 | 类型 | 成员说明 |
---|---|---|
row | Row | 查询到的行 |
标量过滤查询
功能介绍
基于标量属性过滤查询记录。
请求示例
import java.util.Arrays;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.SelectRequest;
import com.baidu.mochow.model.SelectResponse;
import com.baidu.mochow.model.enums.ReadConsistency;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
SelectRequest selectRequest = SelectRequest.builder()
.database(databaseName)
.table(tableName)
.limit(30)
.readConsistency(ReadConsistency.EVENTUAL)
.projections(Arrays.asList("id", "bookName")).build();
while (true) {
SelectResponse selectResponse = mochowClient.select(selectRequest);
System.out.printf("Select result count: %d\n", selectResponse.getRows().size());
if (!selectResponse.isTruncated()) {
break;
}
selectRequest.setMarker(selectResponse.getNextMarker());
}
}
}
相关类说明
SelectRequest
基于标量属性过滤查询记录,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.SelectRequest; //导入包
成员名 | 类型 | 是否必选 | 用途 |
---|---|---|---|
database | String | 是 | 标量过滤数据的库名 |
table | String | 是 | 标量过滤数据的表名 |
filter | String | 否 | 标量过滤条件。 当要删除全部记录,可设置为"*";Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。必须填写主键值或过滤条件,二者有且仅能选其一。 |
projections | List<String> | 否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
marker | GeneralParams | 否 | 查询的分页起始点,用于控制分页查询返回结果的起始位置,方便用户对数据进行分页展示和浏览,用户不填时,默认从第一条符合条件的记录开始返回。 |
limit | int | 否 | 查询返回的记录条数,在进行分页查询时,即每页的记录条数。 默认为10,取值范围[1, 1000]。 |
readConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: |
可以使用SelectRequest.builder()获取SelectRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置SelectRequest的database |
table | String | 无 | 设置SelectRequest的table |
primaryKey | GeneralParams | 无 | 设置SelectRequest的primaryKey |
addPrimaryKey | String, Object | 无 | 为SelectRequest增加一个primaryKey |
partitionKey | GeneralParams | 无 | 设置SelectRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为SelectRequest增加一个partitionKey |
projections | List<String> | 无 | 设置SelectRequest的projections |
retrieveVector | Boolean | 无 | 设置SelectRequest的retrieveVector |
readConsistency | ReadConsistency | 无 | 设置SelectRequest的readConsistency |
limit | int | 无 | 设置SelectRequest的limit |
build | 无 | SelectRequest | 返回一个构建好的SelectRequest |
SelectResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.SelectResponse; //导入包
成员名 | 类型 | 用途 |
---|---|---|
truncated | Boolean | 后续是否还有数据 |
nextMarker | GeneralParams | 查询的分页起始点,用于控制分页查询返回结果的起始位置,方便用户对数据进行分页展示和浏览,用户不填时,默认从第一条符合条件的记录开始返回。 |
rows | List<Row> | 插入的记录列表 |
向量检索
功能介绍
基于向量字段值的KNN或ANN查询,支持通过标量字段值进行过滤。
请求示例
import java.util.Arrays;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.SearchRequest;
import com.baidu.mochow.model.SearchResponse;
import com.baidu.mochow.model.entity.ANNSearchParams;
import com.baidu.mochow.model.entity.HNSWSearchParams;
import com.baidu.mochow.util.JsonUtils;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
SearchRequest searchRequest = SearchRequest.builder()
.database(databaseName)
.table(tableName)
.anns(
ANNSearchParams.builder()
.vectorField("vector")
.vectorFloats(Arrays.asList(1F, 0.21F, 0.213F, 0F))
.filter("bookName='三国演义'")
.params(HNSWSearchParams.builder().ef(200).limit(10).build()).build()
).build();
SearchResponse searchResponse = mochowClient.search(searchRequest);
System.out.printf("Search response: %s\n", JsonUtils.toJsonString(searchResponse));
}
}
请求参数
SearchRequest
基于向量字段值的KNN或ANN支持通过标量字段值进行过滤。拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.SearchRequest; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
database | String | 是 | 插入数据的库名 |
table | String | 是 | 插入数据的表名 |
anns | ANNSearchParams | 无 | 检索请求参数详情。 |
retrieveVector | Boolean | 否 | 是否返回结果记录中的向量字段值,默认为False |
partitionKey | GeneralParams | 否 | 指定记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。 |
projections | List<String> | 否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
readConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: |
可以使用SearchRequest.builder()获取SearchRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置SearchRequest的database |
table | String | 无 | 设置SearchRequest的table |
partitionKey | GeneralParams | 无 | 设置SearchRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为SearchRequest增加一个partitionKey |
projections | List<String> | 无 | 设置SearchRequest的projections |
retrieveVector | Boolean | 无 | 设置SearchRequest的retrieveVector |
readConsistency | ReadConsistency | 无 | 设置SearchRequest的readConsistency |
anns | ANNSearchParams | 无 | 设置SearchRequest的anns |
build | 无 | SearchRequest | 返回一个构建好的SearchRequest |
ANNSearchParams
import com.baidu.mochow.model.entity.ANNSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
vectorField | String | 是 | 检索的指定向量字段名称 |
vectorFloats | List<Float> | 是 | 检索的目标向量字段值。 |
params | SearchParam | 是 | 检索算法的参数详情。 |
filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 |
SearchParams
HNSWSearchParams
import com.baidu.mochow.model.entity.HNSWSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 |
distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 |
distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: |
PUCKSearchParams
import com.baidu.mochow.model.entity.PUCKSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 |
distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 |
distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: |
SearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.SearchResponse; //导入包
成员名 | 类型 | 用途 |
---|---|---|
searchVectorFloats | List |
查询的向量 |
rows | List |
查询结果行 |
批量向量检索
功能介绍
基于向量字段值的KNN或ANN批量查询,支持通过标量字段值进行过滤。
请求示例
import java.util.Arrays;
import com.baidu.mochow.auth.Credentials;
import com.baidu.mochow.client.ClientConfiguration;
import com.baidu.mochow.client.MochowClient;
import com.baidu.mochow.model.BatchSearchRequest;
import com.baidu.mochow.model.BatchSearchResponse;
import com.baidu.mochow.model.entity.BatchANNSearchParams;
import com.baidu.mochow.model.entity.HNSWSearchParams;
import com.baidu.mochow.util.JsonUtils;
public class Main {
public static void main(String[] args) {
String account = "root";
String apiKey = "*********";
String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setCredentials(new Credentials(account, apiKey));
clientConfiguration.setEndpoint(endpoint);
MochowClient mochowClient = new MochowClient(clientConfiguration);
String databaseName = "test";
String tableName = "test";
BatchSearchRequest searchRequest = BatchSearchRequest.builder()
.database(databaseName)
.table(tableName)
.anns(
BatchANNSearchParams.builder()
.vectorField("vector")
.vectorFloats(Arrays.asList(Arrays.asList(1F, 0.21F, 0.213F, 0F)))
.filter("bookName='三国演义'")
.params(HNSWSearchParams.builder().ef(200).limit(10).build()).build()
).build();
BatchSearchResponse searchResponse = mochowClient.batchSearch(searchRequest);
System.out.printf("Search response: %s\n", JsonUtils.toJsonString(searchResponse));
}
}
BatchSearchRequest
基于多个向量字段值的KNN或ANN检索操作,支持通过标量字段值进行过滤。仅适用于多节点标准版,不支持单节点免费测试版。拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
import com.baidu.mochow.model.BatchSearchRequest; //导入包
成员名 | 类型 | 是否必选 | 用途 |
---|---|---|---|
database | String | 是 | 检索数据的库名 |
table | String | 是 | 检索数据的表名 |
anns | BatchANNSearchParams | 无 | 检索请求参数详情。 |
retrieveVector | Boolean | 否 | 是否返回结果记录中的向量字段值,默认为False |
partitionKey | GeneralParams | 否 | 指定记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。 |
projections | List<String> | 否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
readConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: |
可以使用BatchSearchRequest.builder()获取BatchSearchRequest的builder类,builder类拥有如下方法
方法 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
database | String | 无 | 设置BatchSearchRequest的database |
table | String | 无 | 设置BatchSearchRequest的table |
partitionKey | GeneralParams | 无 | 设置BatchSearchRequest的partitionKey |
addPartitionKey | String, Object | 无 | 为BatchSearchRequest增加一个partitionKey |
projections | List<String> | 无 | 设置BatchSearchRequest的projections |
retrieveVector | Boolean | 无 | 设置BatchSearchRequest的retrieveVector |
readConsistency | ReadConsistency | 无 | 设置BatchSearchRequest的readConsistency |
anns | ANNSearchParams | 无 | 设置BatchSearchRequest的anns |
build | 无 | BatchSearchRequest | 返回一个构建好的BatchSearchRequest |
BatchANNSearchParams
import com.baidu.mochow.model.entity.ANNSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
vectorField | String | 是 | 检索的指定向量字段名称 |
vectorFloats | List<List<FloatVector>> | 是 | 检索的目标向量字段值。 |
params | SearchParam | 是 | 检索算法的参数详情。 |
filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 |
BatchSearchParams
HNSWSearchParams
import com.baidu.mochow.model.entity.HNSWSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 |
distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 |
distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: |
PUCKSearchParams
import com.baidu.mochow.model.entity.PUCKSearchParams; //导入包
成员名 | 类型 | 是否必选 | 参数含义 |
---|---|---|---|
ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 |
distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 |
distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: |
BatchSearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.BatchSearchResponse; //导入包
成员名 | 类型 | 用途 |
---|---|---|
results | List<SearchResponse> | 查询的结果 |
SearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
import com.baidu.mochow.model.SearchResponse; //导入包
成员名 | 类型 | 用途 |
---|---|---|
searchVectorFloats | List |
查询的向量 |
rows | List |
查询结果行 |