Row 操作
插入记录
功能介绍
将一条或者一批记录插入到指定的表中。插入语义为Insert,若记录的主键已存在,则插入失败并报错。当插入一批时,该接口暂不支持批次的原子性。
请求示例
1import java.util.ArrayList;
2import java.util.Arrays;
3import java.util.List;
4
5import com.baidu.mochow.auth.Credentials;
6import com.baidu.mochow.client.ClientConfiguration;
7import com.baidu.mochow.client.MochowClient;
8import com.baidu.mochow.model.entity.Row;
9import com.baidu.mochow.model.entity.RowField;
10import com.baidu.mochow.model.InsertRequest;
11import com.baidu.mochow.model.InsertResponse;
12
13public class Main {
14    public static void main(String[] args) {
15        String account = "root";
16        String apiKey = "*********";
17        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
18        ClientConfiguration clientConfiguration = new ClientConfiguration();
19                clientConfiguration.setCredentials(new Credentials(account, apiKey));
20                clientConfiguration.setEndpoint(endpoint);
21        MochowClient mochowClient = new MochowClient(clientConfiguration);
22        String databaseName = "test";
23        String tableName = "test";
24        
25        List<Row> rows = new ArrayList<Row>();
26        rows.add(Row.builder()
27                    .addField(new RowField("id", "0001"))
28                    .addField(new RowField("vector", Arrays.asList(1, 0.21, 0.213, 0)))
29                    .addField(new RowField("bookName", "西游记"))
30                    .addField(new RowField("author", "吴承恩"))
31                    .addField(new RowField("page", 21))
32                    .addField(new RowField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build()
33        );
34        InsertRequest insertRequest = InsertRequest.builder().database(databaseName).table(tableName).rows(rows).build();
35        InsertResponse insertResponse = mochowClient.insert(insertRequest);
36        System.out.printf("Insert affected count:%d\n", insertResponse.getAffectedCount());
37    }
38}
            相关类说明
InsertRequest
插入请求,用于往向量数据库插入数据,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
1import com.baidu.mochow.model.InsertRequest; //导入包
            | 成员名 | 类型 | 是否必填 | 成员含义 | 
|---|---|---|---|
| database | String | 是 | 插入数据的库名 | 
| table | String | 是 | 插入数据的表名 | 
| rows | List<Row> | 是 | 插入的记录列表 | 
Row
行数据,可用builder快速构建
1import 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通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.InsertResponse; //导入包
            | 成员名 | 类型 | 成员含义 | 
|---|---|---|
| affectedCount | int | 插入请求影响的数据库行数 | 
插入或更新记录
功能介绍
将一条或者一批记录插入到指定的表中。插入语义为Upsert(Insert or else Update),即,当记录的主键不存在时,则正常插入,若发现主键已存在,则用新的记录覆盖旧的记录。当插入一批时,该接口暂不支持批次的原子性。该接口可用于批量迁移/灌库等场景。
请求示例
1import java.util.ArrayList;
2import java.util.Arrays;
3import java.util.List;
4
5import com.baidu.mochow.auth.Credentials;
6import com.baidu.mochow.client.ClientConfiguration;
7import com.baidu.mochow.client.MochowClient;
8import com.baidu.mochow.model.entity.Row;
9import com.baidu.mochow.model.entity.RowField;
10import com.baidu.mochow.model.UpsertRequest;
11import com.baidu.mochow.model.UpsertResponse;
12
13public class Main {
14    public static void main(String[] args) {
15        String account = "root";
16        String apiKey = "*********";
17        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
18        ClientConfiguration clientConfiguration = new ClientConfiguration();
19                clientConfiguration.setCredentials(new Credentials(account, apiKey));
20                clientConfiguration.setEndpoint(endpoint);
21        MochowClient mochowClient = new MochowClient(clientConfiguration);
22        String databaseName = "test";
23        String tableName = "test";
24        
25        List<Row> rows = new ArrayList<Row>();
26        rows.add(Row.builder()
27                    .addField(new RowField("id", "0001"))
28                    .addField(new RowField("vector", Arrays.asList(1, 0.21, 0.213, 0)))
29                    .addField(new RowField("bookName", "西游记"))
30                    .addField(new RowField("author", "吴承恩"))
31                    .addField(new RowField("page", 21))
32                    .addField(new RowField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build()
33        );
34        UpsertRequest upsertRequest = UpsertRequest.builder().database(databaseName).table(tableName).rows(rows).build();
35        UpsertResponse upsertResponse = mochowClient.upsert(upsertRequest);
36        System.out.printf("Upsert affected count:%d\n", upsertResponse.getAffectedCount());
37    }
38}
            相关类说明
UpsertRequest
插入或更新请求,用于往向量数据库插入或更新数据,拥有constructor、getter、setter以及builder等通用方法,通用方法详情可以参考通用说明
1import com.baidu.mochow.model.UpsertRequest; //导入包
            | 成员名 | 类型 | 是否必填 | 成员含义 | 
|---|---|---|---|
| database | String | 是 | 插入数据的库名 | 
| table | String | 是 | 插入数据的表名 | 
| rows | List<Row> | 是 | 插入的记录列表 | 
Row
行数据,可用builder快速构建
1import 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通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.UpsertResponse; //导入包
            | 成员名 | 类型 | 参数含义 | 
|---|---|---|
| affectedCount | int | 插入或更新请求影响的数据库行数 | 
更新记录
功能介绍
更新表中指定记录的一个或多个标量字段的值
请求示例
1public class Main {
2    public static void main(String[] args) {
3        String account = "root";
4        String apiKey = "*********";
5        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
6        ClientConfiguration clientConfiguration = new ClientConfiguration();
7                clientConfiguration.setCredentials(new Credentials(account, apiKey));
8                clientConfiguration.setEndpoint(endpoint);
9        MochowClient mochowClient = new MochowClient(clientConfiguration);
10        String databaseName = "test";
11        String tableName = "test";
12        
13        UpdateRequest updateRequest = UpdateRequest.builder()
14                .database(databaseName)
15                .table(tableName)
16                .addPrimaryKey("id", "0001")
17                .addUpdate("bookName", "红楼梦")
18                .addUpdate("author", "曹雪芹")
19                .addUpdate("page", 21)
20                .addUpdate("segment", "满纸荒唐言,一把辛酸泪").build();
21        mochowClient.update(updateRequest);
22    }
23}
            相关类说明
UpdateRequest
更新请求,用于往向量数据库更新数据,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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 | 
删除记录
功能介绍
删除表中的指定记录。
请求示例
1import com.baidu.mochow.auth.Credentials;
2import com.baidu.mochow.client.ClientConfiguration;
3import com.baidu.mochow.client.MochowClient;
4import com.baidu.mochow.model.DeleteRequest;
5
6public class Main {
7    public static void main(String[] args) {
8        String account = "root";
9        String apiKey = "*********";
10        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
11        ClientConfiguration clientConfiguration = new ClientConfiguration();
12                clientConfiguration.setCredentials(new Credentials(account, apiKey));
13                clientConfiguration.setEndpoint(endpoint);
14        MochowClient mochowClient = new MochowClient(clientConfiguration);
15        String databaseName = "test";
16        String tableName = "test";
17        
18        DeleteRequest deleteRequest = DeleteRequest.builder()
19                .database(databaseName)
20                .table(tableName)
21                .addPrimaryKey("id", "0001")
22                .build();
23        mochowClient.delete(deleteRequest);
24    }
25}
            相关类说明
DeleteRequest
删除,用于往向量数据库删除数据,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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 | 
标量查询
功能介绍
基于主键值进行点查。
请求示例
1import java.util.Arrays;
2
3import com.baidu.mochow.auth.Credentials;
4import com.baidu.mochow.client.ClientConfiguration;
5import com.baidu.mochow.client.MochowClient;
6import com.baidu.mochow.model.QueryRequest;
7import com.baidu.mochow.model.QueryResponse;
8import com.baidu.mochow.util.JsonUtils;
9
10public class Main {
11    public static void main(String[] args) {
12        String account = "root";
13        String apiKey = "*********";
14        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
15        ClientConfiguration clientConfiguration = new ClientConfiguration();
16                clientConfiguration.setCredentials(new Credentials(account, apiKey));
17                clientConfiguration.setEndpoint(endpoint);
18        MochowClient mochowClient = new MochowClient(clientConfiguration);
19        String databaseName = "test";
20        String tableName = "test";
21        
22        QueryRequest queryRequest = QueryRequest.builder()
23                .database(databaseName)
24                .table(tableName)
25                .retrieveVector(true)
26                .addPrimaryKey("id", "0005")
27                .projections(Arrays.asList("id", "bookName")).build();
28        QueryResponse queryResponse = mochowClient.query(queryRequest);
29        System.out.printf("Query result: %s\n", JsonUtils.toJsonString(queryResponse.getRow()));
30    }
31}
            相关类说明
QueryRequest
标量查询,基于主键值进行点查,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.QueryResponse; //导入包
            | 成员名 | 类型 | 成员说明 | 
|---|---|---|
| row | Row | 查询到的行 | 
标量过滤查询
功能介绍
基于标量属性过滤查询记录。
请求示例
1import java.util.Arrays;
2
3import com.baidu.mochow.auth.Credentials;
4import com.baidu.mochow.client.ClientConfiguration;
5import com.baidu.mochow.client.MochowClient;
6import com.baidu.mochow.model.SelectRequest;
7import com.baidu.mochow.model.SelectResponse;
8import com.baidu.mochow.model.enums.ReadConsistency;
9
10public class Main {
11    public static void main(String[] args) {
12        String account = "root";
13        String apiKey = "*********";
14        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
15        ClientConfiguration clientConfiguration = new ClientConfiguration();
16                clientConfiguration.setCredentials(new Credentials(account, apiKey));
17                clientConfiguration.setEndpoint(endpoint);
18        MochowClient mochowClient = new MochowClient(clientConfiguration);
19        String databaseName = "test";
20        String tableName = "test";
21        
22        SelectRequest selectRequest = SelectRequest.builder()
23                .database(databaseName)
24                .table(tableName)
25                .limit(30)
26                .readConsistency(ReadConsistency.EVENTUAL)
27                .projections(Arrays.asList("id", "bookName")).build();
28        while (true) {
29            SelectResponse selectResponse = mochowClient.select(selectRequest);
30            System.out.printf("Select result count: %d\n", selectResponse.getRows().size());
31            if (!selectResponse.isTruncated()) {
32                break;
33            }
34            selectRequest.setMarker(selectResponse.getNextMarker());
35        }
36    }
37}
            相关类说明
SelectRequest
基于标量属性过滤查询记录,拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.SelectResponse; //导入包
            | 成员名 | 类型 | 用途 | 
|---|---|---|
| truncated | Boolean | 后续是否还有数据 | 
| nextMarker | GeneralParams | 查询的分页起始点,用于控制分页查询返回结果的起始位置,方便用户对数据进行分页展示和浏览,用户不填时,默认从第一条符合条件的记录开始返回。 | 
| rows | List<Row> | 插入的记录列表 | 
向量检索
功能介绍
基于向量字段值的KNN或ANN查询,支持通过标量字段值进行过滤。
请求示例
1import java.util.Arrays;
2
3import com.baidu.mochow.auth.Credentials;
4import com.baidu.mochow.client.ClientConfiguration;
5import com.baidu.mochow.client.MochowClient;
6import com.baidu.mochow.model.SearchRequest;
7import com.baidu.mochow.model.SearchResponse;
8import com.baidu.mochow.model.entity.ANNSearchParams;
9import com.baidu.mochow.model.entity.HNSWSearchParams;
10import com.baidu.mochow.util.JsonUtils;
11
12public class Main {
13    public static void main(String[] args) {
14        String account = "root";
15        String apiKey = "*********";
16        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
17        ClientConfiguration clientConfiguration = new ClientConfiguration();
18                clientConfiguration.setCredentials(new Credentials(account, apiKey));
19                clientConfiguration.setEndpoint(endpoint);
20        MochowClient mochowClient = new MochowClient(clientConfiguration);
21        String databaseName = "test";
22        String tableName = "test";
23        
24        SearchRequest searchRequest = SearchRequest.builder()
25                .database(databaseName)
26                .table(tableName)
27                .anns(
28                        ANNSearchParams.builder()
29                                .vectorField("vector")
30                                .vectorFloats(Arrays.asList(1F, 0.21F, 0.213F, 0F))
31                                .filter("bookName='三国演义'")
32                                .params(HNSWSearchParams.builder().ef(200).limit(10).build()).build()
33                ).build();
34        SearchResponse searchResponse = mochowClient.search(searchRequest);
35        System.out.printf("Search response: %s\n", JsonUtils.toJsonString(searchResponse));
36    }
37}
            请求参数
SearchRequest
基于向量字段值的KNN或ANN支持通过标量字段值进行过滤。拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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
1import com.baidu.mochow.model.entity.ANNSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| vectorField | String | 是 | 检索的指定向量字段名称 | 
| vectorFloats | List<Float> | 是 | 检索的目标向量字段值。 | 
| params | SearchParam | 是 | 检索算法的参数详情。 | 
| filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 | 
SearchParams
HNSWSearchParams
1import com.baidu.mochow.model.entity.HNSWSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 | 
| distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 | 
| distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: | 
PUCKSearchParams
1import com.baidu.mochow.model.entity.PUCKSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 | 
| distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 | 
| distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: | 
SearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.SearchResponse; //导入包
            | 成员名 | 类型 | 用途 | 
|---|---|---|
| searchVectorFloats | List | 
查询的向量 | 
| rows | List | 
查询结果行 | 
批量向量检索
功能介绍
基于向量字段值的KNN或ANN批量查询,支持通过标量字段值进行过滤。
请求示例
1import java.util.Arrays;
2
3import com.baidu.mochow.auth.Credentials;
4import com.baidu.mochow.client.ClientConfiguration;
5import com.baidu.mochow.client.MochowClient;
6import com.baidu.mochow.model.BatchSearchRequest;
7import com.baidu.mochow.model.BatchSearchResponse;
8import com.baidu.mochow.model.entity.BatchANNSearchParams;
9import com.baidu.mochow.model.entity.HNSWSearchParams;
10import com.baidu.mochow.util.JsonUtils;
11
12public class Main {
13    public static void main(String[] args) {
14        String account = "root";
15        String apiKey = "*********";
16        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
17        ClientConfiguration clientConfiguration = new ClientConfiguration();
18                clientConfiguration.setCredentials(new Credentials(account, apiKey));
19                clientConfiguration.setEndpoint(endpoint);
20        MochowClient mochowClient = new MochowClient(clientConfiguration);
21        String databaseName = "test";
22        String tableName = "test";
23        
24        BatchSearchRequest searchRequest = BatchSearchRequest.builder()
25                .database(databaseName)
26                .table(tableName)
27                .anns(
28                        BatchANNSearchParams.builder()
29                                .vectorField("vector")
30                                .vectorFloats(Arrays.asList(Arrays.asList(1F, 0.21F, 0.213F, 0F)))
31                                .filter("bookName='三国演义'")
32                                .params(HNSWSearchParams.builder().ef(200).limit(10).build()).build()
33                ).build();
34        BatchSearchResponse searchResponse = mochowClient.batchSearch(searchRequest);
35        System.out.printf("Search response: %s\n", JsonUtils.toJsonString(searchResponse));
36    }
37}
            BatchSearchRequest
基于多个向量字段值的KNN或ANN检索操作,支持通过标量字段值进行过滤。仅适用于多节点标准版,不支持单节点免费测试版。拥有constructor、getter、setter等通用方法,通用方法详情可以参考通用说明。其builder方法和通用的builder有区别,在下面有具体说明。
1import 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
1import com.baidu.mochow.model.entity.ANNSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| vectorField | String | 是 | 检索的指定向量字段名称 | 
| vectorFloats | List<List<FloatVector>> | 是 | 检索的目标向量字段值。 | 
| params | SearchParam | 是 | 检索算法的参数详情。 | 
| filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 | 
BatchSearchParams
HNSWSearchParams
1import com.baidu.mochow.model.entity.HNSWSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 | 
| distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 | 
| distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: | 
PUCKSearchParams
1import com.baidu.mochow.model.entity.PUCKSearchParams; //导入包
            | 成员名 | 类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| ef | int | 是 | HNSW算法检索过程的动态候选列表的大小。 | 
| distanceNear | float | 是 | 范围检索场景中的最近距离,表示仅检索候选集中与目标向量的距离大于该值的向量。取值约束同上。 | 
| distanceFar | distanceFar | 否 | 范围检索场景中的最远距离,表示仅检索候选集中与目标向量的距离小于该值的向量。取值约束如下: | 
BatchSearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.BatchSearchResponse; //导入包
            | 成员名 | 类型 | 用途 | 
|---|---|---|
| results | List<SearchResponse> | 查询的结果 | 
SearchResponse
插入或更新回复,向量数据库向客户端返回插入或更新请求的执行结果,拥有getter通用方法,通用方法可以参考通用说明。
1import com.baidu.mochow.model.SearchResponse; //导入包
            | 成员名 | 类型 | 用途 | 
|---|---|---|
| searchVectorFloats | List | 
查询的向量 | 
| rows | List | 
查询结果行 | 
多向量检索
功能介绍
基于多个单向量检索请求的融合查询,支持将多个向量检索结果按照不同的融合策略进行合并,支持通过标量字段值进行过滤和分页查询。
请求示例
1import java.util.ArrayList;
2import java.util.Arrays;
3import java.util.List;
4
5import com.baidu.mochow.auth.Credentials;
6import com.baidu.mochow.client.ClientConfiguration;
7import com.baidu.mochow.client.MochowClient;
8import com.baidu.mochow.model.MultiVectorSearchRequest;
9import com.baidu.mochow.model.SearchRowResponse;
10import com.baidu.mochow.model.SingleVectorSearchRequestInterface;
11import com.baidu.mochow.model.VectorTopkSearchRequest;
12import com.baidu.mochow.model.entity.FloatVector;
13import com.baidu.mochow.model.entity.RRFRank;
14import com.baidu.mochow.model.entity.WeightedRank;
15import com.baidu.mochow.util.JsonUtils;
16
17public class Main {
18    public static void main(String[] args) {
19        String account = "root";
20        String apiKey = "*********";
21        String endpoint = "*.*.*.*:*"; // example: 127.0.0.1:5287
22        ClientConfiguration clientConfiguration = new ClientConfiguration();
23                clientConfiguration.setCredentials(new Credentials(account, apiKey));
24                clientConfiguration.setEndpoint(endpoint);
25        MochowClient mochowClient = new MochowClient(clientConfiguration);
26        String databaseName = "test";
27        String tableName = "test";
28
29        // 创建多个单向量检索请求
30        List<SingleVectorSearchRequestInterface> requests = new ArrayList<>();
31        requests.add(VectorTopkSearchRequest.builder("vector",
32                new FloatVector(Arrays.asList(1F, 0.21F, 0.213F, 0F)), 10).build());
33        requests.add(VectorTopkSearchRequest.builder("vector",
34                new FloatVector(Arrays.asList(0.8F, 0.15F, 0.25F, 0.1F)), 10).build());
35
36        // 使用RRF融合策略构建多向量检索请求
37        MultiVectorSearchRequest searchRequest = MultiVectorSearchRequest.builder(requests)
38                .rankPolicy(new RRFRank(60))
39                .limit(10)
40                .filter("bookName='三国演义'")
41                .projections(Arrays.asList("id", "bookName"))
42                .build();
43
44        // 执行检索
45        SearchRowResponse searchResponse = mochowClient.vectorSearch(databaseName, tableName, searchRequest);
46        System.out.printf("Multi-vector search response: %s\n", JsonUtils.toJsonString(searchResponse));
47    }
48}
            请求参数
MultiVectorSearchRequest
基于多个单向量检索请求的融合查询,支持多种融合策略和标量过滤。拥有builder模式进行构建。
1import com.baidu.mochow.model.MultiVectorSearchRequest; //导入包
            | Builder方法 | 参数类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| builder | List<SingleVectorSearchRequestInterface> | 是 | 构建多向量检索请求的静态方法,传入单向量检索请求列表 | 
| rankPolicy | FusionRankPolicy | 否 | 融合策略,支持RRF和加权求和两种策略 | 
| limit | int | 否 | 返回结果数量限制,默认为10 | 
| filter | String | 否 | 标量过滤条件,Filter表达式语法参照SQL的WHERE子句语法 | 
| projections | List<String> | 否 | 投影字段列表,默认为空时返回所有标量字段 | 
| partitionKey | GeneralParams | 否 | 指定记录的分区键值 | 
| readConsistency | ReadConsistency | 否 | 查询请求的一致性级别,默认为EVENTUAL | 
| advancedOptions | AdvancedOptions | 否 | 高级搜索选项 | 
| iteratedIds | String | 否 | 分页查询的迭代ID,用于支持分页查询 | 
FusionRankPolicy 融合策略接口
向量融合策略的基接口,具体实现类包括:
RRFRank (Reciprocal Rank Fusion)
倒数排名融合策略,基于多个检索结果的排名进行融合。
1import com.baidu.mochow.model.entity.RRFRank; //导入包
            | 构造方法 | 参数类型 | 参数含义 | 
|---|---|---|
| RRFRank | int | 融合参数k值,用于控制排名融合的权重,通常设置为60 | 
WeightedRank
加权求和融合策略,基于多个检索结果的相似度分数按权重求和。
1import com.baidu.mochow.model.entity.WeightedRank; //导入包
            | 构造方法 | 参数类型 | 参数含义 | 
|---|---|---|
| WeightedRank | List<Float> | 权重列表,每个权重对应一个单向量检索请求,权重值范围通常为[0.0, 1.0] | 
VectorTopkSearchRequest
单向量检索请求,用于构建多向量检索的输入。
1import com.baidu.mochow.model.VectorTopkSearchRequest; //导入包
            | Builder方法 | 参数类型 | 是否必选 | 参数含义 | 
|---|---|---|---|
| builder | String, FloatVector, int | 是 | 构建单向量检索请求的静态方法,参数分别为向量字段名、向量值、返回数量 | 
| params | SearchParam | 否 | 检索算法参数 | 
| filter | String | 否 | 该单向量检索的过滤条件 | 
| retrieveVector | Boolean | 否 | 是否返回向量字段值,默认为false | 
SearchRowResponse
多向量检索回复,向量数据库向客户端返回检索请求的执行结果,拥有getter通用方法。
1import com.baidu.mochow.model.SearchRowResponse; //导入包
            | 成员名 | 类型 | 用途 | 
|---|---|---|
| rows | List<SearchResultRow> | 融合后的查询结果行列表 | 
| truncated | Boolean | 后续是否还有数据 | 
| iteratedIds | String | 分页查询的迭代ID,用于获取下一页结果 | 
