Row 操作
更新时间:2025-02-25
插入记录
功能介绍
将一条或者一批记录插入到指定的数据表中。插入语义为Insert,即,当记录的主键已存在时,则插入报错。当插入一批时,该接口暂不支持批次的原子性。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 // create alias
25 data := []api.Row{
26 {
27 Fields: map[string]interface{}{
28 "id": "0001",
29 "bookName": "西游记",
30 "author": "吴承恩",
31 "vector": []float32{0.2123, 0.21, 0.213},
32 },
33 },
34 {
35 Fields: map[string]interface{}{
36 "id": "0002",
37 "bookName": "西游记",
38 "author": "吴承恩",
39 "vector": []float32{0.2123, 0.22, 0.213},
40 },
41 },
42 }
43
44 insertArgs := &api.InsertRowArg{
45 Database: "db_test",
46 Table: "table_test",
47 Rows: data,
48 }
49
50 insertResult, err := client.InsertRow(insertArgs)
51 if err != nil {
52 log.Fatalf("Fail to insert row due to error: %v", err)
53 return
54 }
55 log.Printf("insert row response: %v", insertResult)
56}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
insertRowArgs | InsertRowArgs | 是 | 插入的记录。 |
InsertRowArgs
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
Rows | List |
是 | 插入的记录。 |
插入或更新记录
功能介绍
将一条或者一批记录插入到指定的数据表中。插入语义为Upsert(Insert or Update),即,当记录的主键已存在时,则用新的数据整体覆盖旧的数据。当插入一批时,该接口暂不支持批次的原子性。该接口可用于批量迁移/灌库等场景。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 // create alias
25 data := []api.Row{
26 {
27 Fields: map[string]interface{}{
28 "id": "0001",
29 "bookName": "西游记",
30 "author": "吴承恩",
31 "vector": []float32{0.2123, 0.21, 0.213},
32 },
33 },
34 {
35 Fields: map[string]interface{}{
36 "id": "0002",
37 "bookName": "西游记",
38 "author": "吴承恩",
39 "vector": []float32{0.2123, 0.22, 0.213},
40 },
41 },
42 }
43
44 upsertArgs := &api.UpsertRowArg{
45 Database: "db_test",
46 Table: "table_test",
47 Rows: data,
48 }
49
50 upsertResult, err := client.UpsertRow(upsertArgs)
51 if err != nil {
52 log.Fatalf("Fail to insert row due to error: %v", err)
53 return
54 }
55 log.Printf("upsert row response: %v", upsertResult)
56}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
upsertArgs | UpsertRowArgs | 是 | 插入的记录。 |
UpsertRowArgs
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
Rows | List |
是 | 插入的记录。 |
更新记录
功能介绍
更新表中指定记录的一个或多个标量字段的值。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 updateArgs := &api.UpdateRowArgs{
25 Database: "db_test",
26 Table: "table_test",
27 PrimaryKey: map[string]interface{}{
28 "id": "0001",
29 },
30 Update: map[string]interface{}{
31 "bookName": "红楼梦",
32 "author": "曹雪芹",
33 },
34 }
35 err = client.UpdateRow(updateArgs)
36 if err != nil {
37 log.Fatalf("Fail to update row due to error: %v", err)
38 return
39 }
40}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
updateArgs | UpdateRowArgs | 是 | 更新记录请求参数。 |
UpdateRowArgs
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
PrimaryKey | Object | 是 | 指定记录的主键值。 |
PartitionKey | Object | 否 | 指定记录的分区键值。如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。 |
Update | Object | 是 | 待更新的字段列表及其新值。不允许更新主键、分区键和向量字段。 |
删除记录
功能介绍
删除数据表中的指定记录。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 // delete row
25 deleteArgs := &api.DeleteRowArgs{
26 Database: "db_test",
27 Table: "table_test",
28 PrimaryKey: map[string]interface{}{
29 "id": "0001",
30 },
31 }
32
33 err = client.DeleteRow(deleteArgs)
34 if err != nil {
35 log.Fatalf("Fail to delete row due to error: %v", err)
36 return
37 }
38}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
deleteArgs | DeleteRowArgs | 是 | 删除记录请求参数。 |
DeleteRowArgs
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
PrimaryKey | Object | 是 | 指定记录的主键值。 |
PartitionKey | Object | 否 | 指定记录的分区键值。如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。 |
Filter | String | 否 | 删除的标量过滤条件。 当要删除全部记录,可设置为"*";Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。必须填写主键值或过滤条件,二者有且仅能选其一。 |
标量查询
功能介绍
基于主键值的点查操作。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 queryArgs := &api.QueryRowArgs{
25 Database: m.database,
26 Table: m.table,
27 PrimaryKey: map[string]interface{}{
28 "id": "0001",
29 },
30 Projections: []string{"id", "bookName"},
31 RetrieveVector: false,
32 }
33
34 queryResult, err := client.QueryRow(queryArgs)
35 if err != nil {
36 log.Fatalf("Fail to query row due to error: %v", err)
37 return
38 }
39 log.Printf("query row response: %v", queryResult)
40}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
queryArgs | QueryRowArgs | 是 | 标量查询请求参数。 |
QueryRowArgs
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
PrimaryKey | Object | 是 | 目标记录的主键值。 |
PartitionKey | Object | 否 | 目标记录的分区键值。 |
Projections | List |
否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
RetrieveVector | Boolean | 否 | 是否返回查询结果记录中的向量字段值,默认为False。 |
ReadConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。 |
标量批量查询
功能介绍
基于主键值的批量点查操作。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 batchQueryArgs := &api.BatchQueryRowArgs{
25 Database: m.database,
26 Table: m.table,
27 Keys: []api.QueryKey{
28 {
29 PrimaryKey: map[string]interface{}{
30 "id": "0001",
31 },
32 },
33 {
34 PrimaryKey: map[string]interface{}{
35 "id": "0002",
36 },
37 },
38 },
39 Projections: []string{"id", "bookName"},
40 RetrieveVector: false,
41 }
42 queryResult, err := client.BatchQueryRow(batchQueryArgs)
43 if err != nil {
44 log.Fatalf("Fail to batch query row due to error: %v", err)
45 return
46 }
47 log.Printf("batch query row response: %v", queryResult)
48}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
Keys | List |
是 | 目标记录的主键及分区键 |
Projections | List |
否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
RetrieveVector | Boolean | 否 | 是否返回查询结果记录中的向量字段值,默认为False。 |
ReadConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。 |
QueryKey参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
PrimaryKey | Object | 是 | 目标记录的主键 |
PartitionKey | Object | 否 | 目标记录的分区键值。 如该表的分区键和主键是同一个键,则不需要填写分区键值。 |
向量TopK检索
功能介绍
基于向量字段值的KNN或ANN检索操作,支持通过标量字段值进行过滤。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 // search
25 vector := api.FloatVector([]float32{0.3123, 0.43, 0.213})
26 searchArgs := &api.VectorSearchArgs{
27 Database: "db_test",
28 Table: "table_test",
29 Request: api.VectorTopkSearchRequest{}.
30 New("vector", vector, 5).
31 Filter("bookName='三国演义'").
32 Config(api.VectorSearchConfig{}.New().Ef(200)),
33 }
34
35 searchResult, err := client.VectorSearch(searchArgs)
36 if err != nil {
37 log.Fatalf("Fail to search row due to error: %v", err)
38 return
39 }
40
41 log.Printf("search row response: %v", searchResult)
42}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
Request | VectorTopkSearchRequest/VectorRangeSearchRequest | 是 | 检索请求参数描述信息。 |
Partition_key | Json | 否 | 目标记录的分区键值,如果该表的分区键和主键是同一个键,则不需要填写分区键值。 需要注意的是,如果没有指定分区键值,那么该检索请求可能会退化为在该表所有分片上都执行的MPP检索。 |
Projections | List |
否 | 投影字段列表,默认为空,为空时检索结果返回所有标量字段。 |
ReadConsistency | ReadConsistency | 否 | 检索请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,检索请求会随机发送给分片的所有副本; STRONG:强一致性,检索请求只会发送给分片主副本。 |
VectorTopkSearchRequest参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
VectorField | String | 是 | 检索的目标向量字段名称。 |
Vector | FloatVector | 是 | 检索的目标向量字段值。 |
Limit | int | 否 | 返回最接近目标向量的向量记录数量,相当于TopK的K值,默认为50 |
Filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 |
Config | VectorSearchConfig | 是 | 向量检索算法的运行参数 |
VectorRangeSearchRequest参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
VectorField | String | 是 | 检索的目标向量字段名称。 |
Vector | FloatVector | 是 | 检索的目标向量字段值。 |
DistanceRange | [float, float] | 是 | 范围检索场景中的最近距离与最远距离,最近距离在前,取值约束如下: 任意距离算法下,distanceFar都必须大于等于distanceNear,不支持小于; 当索引距离为L2时,distanceFar和distanceNear仅支持正数; 当索引距离为COSINE时,distanceFar和distanceNear的取值范围为[-1.0, 1.0]; distanceFar与distanceNear需要成对出现。 |
Limit | int | 否 | 与目标向量的距离在约束范围内的最近向量数量,相当于TopK的K值,默认为50 |
Filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 |
Config | VectorSearchConfig | 是 | 向量检索算法的运行参数 |
VectorSearchConfig参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
ef | int | 否 | HNSW算法检索过程的动态候选列表的大小。 |
pruning | bool | 否 | HNSW算法检索过程中是否开启剪枝优化 |
search_coarse_count | int | 否 | PUCK算法检索过程粗聚类中心候选集大小。 |
标量过滤查询
功能介绍
基于标量属性过滤查询记录。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 selectArgs := &api.SelectRowArgs{
25 Database: m.database,
26 Table: m.table,
27 Filter: "id = '001'",
28 Projections: []string{"id", "bookName"},
29 Limit: 10,
30 }
31
32 selectResult, err := client.SelectRow(selectArgs)
33 if err != nil {
34 log.Fatalf("Fail to select row due to error: %v", err)
35 return
36 }
37
38 log.Printf("select row response: %v", selectResult)
39}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Filter | String | 否 | 标量过滤条件,表示仅查询符合过滤条件的记录,默认为空。 filter 的表达式格式为 <field_name> |
Marker | Json | 否 | 查询的分页起始点,用于控制分页查询返回结果的起始位置,方便用户对数据进行分页展示和浏览,用户不填时,默认从第一条符合条件的记录开始返回。 marker中需要包括主键和分区键。 |
Projections | List |
否 | 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。 |
ReadConsistency | ReadConsistency | 否 | 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。 |
Limit | Int | 否 | 查询返回的记录条数,在进行分页查询时,即每页的记录条数。 默认为10,取值范围[1, 1000]。 |
全文检索
功能介绍
基于关键字的全文检索,支持通过标量字段值进行过滤。
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 searchArgs := &api.BM25SearchArgs{
25 Database: "db_test",
26 Table: "table_test",
27 Request: api.BM25SearchRequest{}.
28 New("book_segment_inverted_idx", "吕布").
29 Limit(12).
30 Filter("bookName='三国演义'").
31 ReadConsistency("STRONG").
32 Projections([]string{"id", "vector"}),
33 }
34
35 searchResult, err := client.BM25Search(searchArgs)
36 if err != nil {
37 log.Fatalf("Fail to search row due to error: %v", err)
38 return
39 }
40 log.Printf("search row response: %v", searchResult)
41}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Database | String | 是 | 库名。 |
Table | String | 是 | 表名。 |
Request | BM25SearchRequest | 是 | 全文检索的详细参数 |
PartitionKey | Json | 否 | 目标记录的分区键值,如果该表的分区键和主键是同一个键,则不需要填写分区键值。 需要注意的是,如果没有指定分区键值,那么该检索请求可能会退化为在该表所有分片上都执行的MPP检索。 |
Projections | List |
否 | 投影字段列表,默认为空,为空时检索结果返回所有标量字段。 |
ReadConsistency | ReadConsistency | 否 | 检索请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,检索请求会随机发送给分片的所有副本; STRONG:强一致性,检索请求只会发送给分片主副本。 |
BM25SearchRequest参数
参数名称 | 类型 | 是否必填 | 描述 |
---|---|---|---|
IndexName | String | 是 | 倒排索引的名字 |
SearchText | String | 是 | 全文检索的检索表达式,UTF-8编码,几种常见用法: content:数据库 ----> 在content这列搜索"数据库"关键字 content: 百度VectorDB数据库 -----> 在content这列匹配"百度VectorDB数据库"中任意关键字 content: "百度VectorDB数据库" -----> 搜索短语"百度VectorDB数据库" content: 百度 AND content: VectorDB ----> 在content这列同时匹配"百度"、"VectorDB" 关键字 content: 百度 OR content: VectorDB. -----> 在content这列匹配"百度"、"VectorDB"的任意一个 更多用法见全文检索表达式 |
Limit | Int | 否 | 指定返回相关性最高的条目数 |
Filter | String | 否 | 标量过滤条件,表示仅查询符合过滤条件的记录,默认为空。 filter 的表达式格式为 <field_name> |
全文检索的表达式
检索类型 | 用法 | 例子 | 例子含义 | 备注 |
---|---|---|---|---|
关键词检索 | field_name: keyword field_name: (keyword_1, keyword_2) | title:数据库 title: (数据库 百度) | 在title这列搜索“数据库”关键字 在title这列搜索“数据库”、"百度"关键字,满足任意一个即可 | |
关键词检索 | keyword keyword_1 AND keyword_2 | 数据库 数据库 AND 百度 | 在content 这列上搜索"数据库"关键字 在content 这列上搜索,要求同时包括"数据库"、"百度" 关键字 | 只适用于在单列上建立倒排索引的情况,如在content 这列上建立倒排索引 |
复合检索: AND/OR | query_1 AND query_2 query_1 OR query_2 (query_1 OR query_2) AND query_3 | title:数据库 AND title:百度 title:数据库 OR title:百度 (title:数据库 OR title:百度) AND content:VectorDB | 在title这列搜索, 要求同时包括"数据库"、"百度" 这2个关键字 在title这列搜索, 要求包括"数据库"、"百度" 任意一个 在title这列搜索, 要求包括"数据库"、"百度" 任意一个,同时content列包含"VectorDB"关键字 | |
Phrase检索 | field_name:"phrase" | title: "百度VectorDB数据库" | 在title这里搜索"百度VectorDB数据库"短语 | 短语必须使用""双引号 |
Match检索 | field_name: statement | content: 百度VectorDB的优缺点 | 在content这列搜索"百度VectorDB的优缺点"的任意词,匹配词数量越多,相关性得分越高 | |
prefix检索 | field_name:keyword* | title:数据* | 在title这列检索,包含以"数据"为前缀词的文档 | |
更改查询权重 | field_name:keyword^boost | title:数据库^2 OR content: 百度 | title包括"数据库"关键字,或content包含“百度”关键字,最后计算相关性得分是,title列匹配的文档权重系数为2, content 列匹配的权重系数为1.0 | 不设置boost的话,默认权重都是1.0 |
全文检索表达式会将一些特殊字符用于专用目的,如想在表达式中匹配一些特殊字符,需要用\符号进行转义。当前被征用特殊字符包括:
-
- && || ! ( ) { } [ ] ^ " ~ * ? : \
以"百度自研的向量数据库:VectorDB"这个表达式为例,表达式解释器会认为想在"百度自研的向量数据库" 这列上搜索"VectorDB",这就违背了使用者的初衷,为此需要把表达式写成"百度自研的向量数据库:VectorDB"
混合检索
功能介绍
同时进行关键字全文检索和向量检索,检索结果融合排序后返回,也支持通过标量属性进行过滤
请求示例
Go
1package main
2
3import (
4 "log"
5
6 "github.com/baidu/mochow-sdk-go/mochow/api"
7 "github.com/baidu/mochow-sdk-go/mochow"
8)
9
10func main() {
11 clientConfig := &mochow.ClientConfiguration{
12 Account: "root",
13 APIKey: "您的账户API密钥",
14 Endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
15 }
16
17 // create mochow client
18 client, err := mochow.NewClientWithConfig(clientConfig)
19 if err != nil {
20 log.Fatalf("Fail to init mochow client due to error:%v", err)
21 return
22 }
23
24 vector := api.FloatVector([]float32{0.3123, 0.43, 0.213})
25 request := api.HybridSearchRequest{}.
26 New(
27 api.VectorTopkSearchRequest{}.New("vector", vector, 15).Config(api.VectorSearchConfig{}.New().Ef(200)), /*vector search args*/
28 api.BM25SearchRequest{}.New("book_segment_inverted_idx", "吕布"), /*BM25 search args*/
29 0.4, /*vector search weight*/
30 0.6 /*BM25 search weight*/).
31 Filter("bookName='三国演义'").
32 Limit(15)
33
34 searchArgs := &api.HybridSearchArgs{
35 Database: "db_test",
36 Table: "table_test",
37 Request: request,
38 }
39
40 searchResult, err := client.HybridSearch(searchArgs)
41 if err != nil {
42 log.Fatalf("Fail to search row due to error: %v", err)
43 return
44 }
45
46 log.Printf("hybrid search row response: %v", searchResult)
47}
请求参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
Request | HybridSearchRequest | 是 | 混合检索的详细参数 |
PartitionKey | Object | 否 | 目标记录的分区键值,如果该表的分区键和主键是同一个键,则不需要填写分区键值。 需要注意的是,如果没有指定分区键值,那么该检索请求可能会退化为在该表所有分片上都执行的MPP检索。 |
Projections | List |
否 | 投影字段列表,默认为空,为空时检索结果返回所有标量字段。 |
ReadConsistency | ReadConsistency | 否 | 检索请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,检索请求会随机发送给分片的所有副本; STRONG:强一致性,检索请求只会发送给分片主副本。 |
HybridSearchRequest参数
参数 | 参数类型 | 是否必选 | 参数含义 |
---|---|---|---|
vectorRequest | VectorSearchRequest | 是 | 向量检索的详细参数 |
bm25Request | BM25SearchRequest | 是 | 全文检索的详细参数 |
vectorWeight | float | 否 | 向量检索结果在混合检索中所占权重,默认0.5 |
bm25Weight | float | 否 | 全文检索结果在混合检索中所占比重,默认0.5 |
limit | Int | 否 | 返回的最相关条目数 |
filter | String | 否 | 检索的标量过滤条件,表示仅在符合过滤条件的候选集中进行检索,默认为空。Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。 |