搜索本产品文档关键词
Row 操作
所有文档
menu
没有找到结果,请重新输入

向量数据库 VectorDB

Row 操作

插入记录

功能介绍

将一条或者一批记录插入到指定的数据表中。插入语义为Insert,即,当记录的主键已存在时,则插入报错。当插入一批时,该接口暂不支持批次的原子性。

请求示例

import { MochowClient, Row, InsertArgs } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let rows: Row[] = [
    {
        "id": "0001",
        "bookName": "西游记",
        "author": "吴承恩",
        "vector": [0.2123, 0.21, 0.213],
    },
    {
        "id": "0002",
        "bookName": "西游记",
        "author": "吴承恩",
        "vector": [0.2123, 0.22, 0.213],
    },
    {
        "id": "0003",
        "bookName": "三国演义",
        "author": "罗贯中",
        "vector": [0.2123, 0.23, 0.213],
    }
]
let insertArgs: InsertArgs = {
    database: "db_test",
    table: "table_test",
    rows: rows,
}
let resp = await mochowClient.insert(insertArgs)

请求参数

参数 参数类型 是否必选 参数含义
insertArgs InsertArgs 插入的记录。

InsertArgs

参数 参数类型 是否必选 参数含义
database String 库名。
table String 表名。
rows List 插入的记录。

插入或更新记录

功能介绍

将一条或者一批记录插入到指定的数据表中。插入语义为Upsert(Insert or Update),即,当记录的主键已存在时,则用新的数据整体覆盖旧的数据。当插入一批时,该接口暂不支持批次的原子性。该接口可用于批量迁移/灌库等场景。

请求示例

import { MochowClient, Row, InsertArgs } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let rows: Row[] = [
    {
        "id": "0001",
        "bookName": "西游记",
        "author": "吴承恩",
        "vector": [0.2123, 0.21, 0.213],
    },
    {
        "id": "0002",
        "bookName": "西游记",
        "author": "吴承恩",
        "vector": [0.2123, 0.22, 0.213],
    },
    {
        "id": "0003",
        "bookName": "三国演义",
        "author": "罗贯中",
        "vector": [0.2123, 0.23, 0.213],
    }
]
let upsertArgs: UpsertArgs = {
    database: "db_test",
    table: "table_test",
    rows: rows,
}
let resp = await mochowClient.upsert(upsertArgs)

请求参数

参数 参数类型 是否必选 参数含义
upsertArgs UpsertArgs 插入的记录。

UpsertArgs

参数 参数类型 是否必选 参数含义
database String 库名。
table String 表名。
rows List 插入的记录。

更新记录

功能介绍

更新表中指定记录的一个或多个标量字段的值。

请求示例

import { MochowClient } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let resp = await mochowClient.update({
    database: "db_test",
    table: "table_test",
    primaryKey: {
        id: "0001",
    },
    update: {
        bookName: "红楼梦",
        author: "曹雪芹",
        page: 100,
        segment: "满纸荒唐言,一把辛酸泪",
    },
});

请求参数

参数 参数类型 是否必选 参数含义
updateArgs UpdateArgs 更新记录请求参数。

UpdateArgs

参数 参数类型 是否必选 参数含义
database String 库名。
tabler String 表名。
primaryKey Object 指定记录的主键值。
partitionKey Object 指定记录的分区键值。如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。
update Object 待更新的字段列表及其新值。不允许更新主键、分区键和向量字段。

删除记录

功能介绍

删除数据表中的指定记录。

请求示例

import { MochowClient } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let resp = await mochowClient.delete({
    database: "db_test",
    table: "table_test",
    primaryKey: {
        "id": "0001"
    }
})

请求参数

参数 参数类型 是否必选 参数含义
deleteArgs DeleteArgs 删除记录请求参数。

DeleteArgs

参数 参数类型 是否必选 参数含义
database String 库名。
table String 表名。
primaryKey Object 指定记录的主键值。
partitionKey Object 指定记录的分区键值。如果该表的分区键和主键是同一个键,则不需要填写分区键值。只有在有主键值的情况下,分区键值才会生效。
filter String 删除的标量过滤条件。
当要删除全部记录,可设置为"*";Filter表达式语法参照SQL的WHERE子句语法进行设计,其详细描述和使用示例请参见Filter条件表达式。必须填写主键值或过滤条件,二者有且仅能选其一。

标量查询

功能介绍

基于主键值的点查操作。

请求示例

import { MochowClient, ReadConsistency, QueryArgs } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let queryArgs: QueryArgs = {
    database: "db_test",
    table: "table_test",
    primaryKey: {
        "id": "0001"
    },
    projections: ["id", "bookName"],
    retrieveVector: false,
    readConsistency: ReadConsistency.EVENTUAL
}
let resp = await mochowClient.query(queryArgs);

请求参数

参数 参数类型 是否必选 参数含义
queryArgs QueryArgs 标量查询请求参数。

QueryArgs

参数 参数类型 是否必选 参数含义
database String 库名。
table String 表名。
primaryKey Object 目标记录的主键值。
partitionKey Object 目标记录的分区键值。 如果该表的分区键和主键是同一个键,则不需要填写分区键值。
projections List 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。
retrieveVector Boolean 是否返回查询结果记录中的向量字段值,默认为False。
readConsistency ReadConsistency 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。

标量批量查询

功能介绍

基于主键值的批量点查操作。

请求示例

import { MochowClient, ReadConsistency, BatchQueryArgs } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let queryArgs: BatchQueryArgs = {
    database: this.database_name,
    table: this.table_name,
    keys: [
        {
            primaryKey: {
                "id": "0001"
            }
        },
        {
            primaryKey: {
                "id": "0002"
            }
        }
    ],
    projections: ["id", "bookName"],
    retrieveVector: false,
    readConsistency: ReadConsistency.EVENTUAL
}
let resp = await mochowClient.batchQuery(queryArgs);

请求参数

参数 参数类型 是否必选 参数含义
database String 库名。
table String 表名。
keys List 目标记录的主键及分区键
projections List 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。
retrieveVector Boolean 是否返回查询结果记录中的向量字段值,默认为False。
readConsistency ReadConsistency 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。

QueryKey参数

参数 参数类型 是否必选 参数含义
primaryKey Object 目标记录的主键
partitionKey Object 目标记录的分区键值。 如该表的分区键和主键是同一个键,则不需要填写分区键值。

向量TopK检索

功能介绍

基于向量字段值的KNN或ANN检索操作,支持通过标量字段值进行过滤

请求示例

import { MochowClient, Vector, VectorSearchArgs, VectorSearchConfig, VectorTopkSearchRequest } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
})

let vector = new Vector([0.3123, 0.43, 0.213])
let searchArgs: VectorSearchArgs = {
    database: "db_test",
    table: "table_test",
    request: new VectorTopkSearchRequest("vector", vector, 5).
        Filter("bookName='三国演义'").
        Config(new VectorSearchConfig().Ef(200)),
}
let resp = await mochowClient.vectorSearch(searchArgs)

请求参数

参数 参数类型 是否必选 参数含义
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算法检索过程粗聚类中心候选集大小。

标量过滤查询

功能介绍

基于标量属性过滤查询记录。

请求示例

import { MochowClient, SelectArgs } from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
});

let selectArgs: SelectArgs = {
    database: "db_test",
    table: "table_test",
    projections: ["id", "bookName"],
    limit: 5,
};

let resp = await mochowClient.select(selectArgs);

请求参数

参数 参数类型 是否必选 参数含义
filter String 标量过滤条件,表示仅查询符合过滤条件的记录,默认为空。 filter 的表达式格式为 <field_name>,多个表达式之间支持 and(与)、or(或)、not(非)关系。具体信息。 <field_name>:表示要过滤的字段名 :表示要使用的运算符,支持字符串相等(=)、整型相等(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=) :表示要匹配的值 布尔值:true或者false 整型值:常规表示 字符串类型:头尾必须使用英文单引号括起来 二进制类型:同字符串类型,但是必须采用base64编码 日期/时间:同字符串类型
marker Object 查询的分页起始点,用于控制分页查询返回结果的起始位置,方便用户对数据进行分页展示和浏览,用户不填时,默认从第一条符合条件的记录开始返回。 marker中需要包括主键和分区键。
projections List 投影字段列表,默认为空,为空时查询结果默认返回所有标量字段。
readConsistency ReadConsistency 查询请求的一致性级别,取值为: EVENTUAL(默认值):最终一致性,查询请求会随机发送给分片的所有副本; STRONG:强一致性,查询请求只会发送给分片主副本。
limit Int 查询返回的记录条数,在进行分页查询时,即每页的记录条数。 默认为10,取值范围[1, 1000]。

全文检索

功能介绍

基于关键字的全文检索,支持通过标量字段值进行过滤

请求示例

import {
    MochowClient,
    BM25SearchArgs,
    BM25SearchRequest,
} from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
});

let searchArgs: BM25SearchArgs = {
    database: "db_test",
    table: "table_test",
    request: new BM25SearchRequest("book_segment_inverted_idx", "吕布")
        .Filter("bookName='三国演义'")
        .Limit(10)
        .Projections(["id", "bookName", "author", "page"])
        .ReadConsistency("STRONG")
        .Projections(["id", "vector"]),
};

let resp = await mochowClient.bm25Search(searchArgs);

请求参数

参数 参数类型 是否必选 参数含义
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>,多个表达式之间支持 and(与)、or(或)、not(非)关系。具体信息。 <field_name>:表示要过滤的字段名 :表示要使用的运算符,支持字符串相等(=)、整型相等(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=) :表示要匹配的值 布尔值:true或者false 整型值:常规表示 字符串类型:头尾必须使用英文单引号括起来 二进制类型:同字符串类型,但是必须采用base64编码 日期/时间:同字符串类型

全文检索的表达式

检索类型 用法 例子 例子含义 备注
关键词检索 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"

混合检索

功能介绍

同时进行关键字全文检索和向量检索,检索结果融合排序后返回,也支持通过标量属性进行过滤

请求示例

import {
    MochowClient,
    Vector,
    HybridSearchArgs,
    HybridSearchRequest,
    VectorSearchConfig,
    VectorTopkSearchRequest,
    BM25SearchRequest,
} from "@mochow/mochow-sdk-node";

const mochowClient = new MochowClient({
    credential: {
        account: "root",
        apiKey: "您的账户API密钥",
    },
    endpoint: "您的实例访问端点", // 例如:'http://127.0.0.1:5287'
});

let vector = new Vector([0.3123, 0.43, 0.213])
let searchArgs: HybridSearchArgs = {
    database: "db_test",
    table: "table_test",
    request: new HybridSearchRequest(
        new VectorTopkSearchRequest("vector", vector, 15).Config(new VectorSearchConfig().Ef(200)),
        new BM25SearchRequest("book_segment_inverted_idx", "吕布"),
        0.4,
        0.6
    ).
    Filter("bookName='三国演义'").
    Limit(15)
}
let resp = await mochowClient.hybridSearch(searchArgs)

请求参数

参数 参数类型 是否必选 参数含义
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 的表达式格式为 <field_name>,多个表达式之间支持 and(与)、or(或)、not(非)关系。具体信息。 <field_name>:表示要过滤的字段名 :表示要使用的运算符,支持字符串相等(=)、整型相等(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=) :表示要匹配的值 布尔值:true或者false 整型值:常规表示 字符串类型:头尾必须使用英文单引号括起来 二进制类型:同字符串类型,但是必须采用base64编码 日期/时间:同字符串类型
上一篇
Alias 操作
下一篇
Index 操作