功能介绍
upsert() 接口用于给创建的 Collection 中插入 Document。如果 Collection 在创建时,已配置 Embedding 参数,则仅需要插入文本信息,Embedding 服务会自动将文本信息转换为向量数据,存入数据库。
请求示例
如果您使用 Embedding 功能,在createCollection() 建表时,配置 Embedding 模型相关参数之后,便可以通过 upsert() 接口可直接传入原始文本。Embedding 模型会将原始文本转换为向量数据,并将转换后的向量数据以及原始文本一并存入数据库。具体信息,请参见 Embedding 介绍。如下示例,基于 createCollection() 创建的集合 book-emb,写入原始文本。
// link databaseDatabase db = client.database("db-test");// link collectionCollection collection = db.collection("book-emb");// upsertDocument doc1 = Document.newBuilder().withId("0001").addDocField(new DocField("text", "富贵功名,前缘分定,为人切莫欺心。")).addDocField(new DocField("bookName", "西游记")).addDocField(new DocField("author", "吴承恩")).addDocField(new DocField("page", 21)).addDocField(new DocField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build();Document doc2 = Document.newBuilder().withId("0002").addDocField(new DocField("text","正大光明,忠良善果弥深。些些狂妄天加谴,眼前不遇待时临。")).addDocField(new DocField("bookName", "西游记")).addDocField(new DocField("author", "吴承恩")).addDocField(new DocField("page", 22)).addDocField(new DocField("segment","正大光明,忠良善果弥深。些些狂妄天加谴,眼前不遇待时临。")).build();Document doc3 = Document.newBuilder().withId("0003").addDocField(new DocField("text", "细作探知这个消息,飞报吕布。")).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 23)).addDocField(new DocField("segment", "细作探知这个消息,飞报吕布。")).build();Document doc4 = Document.newBuilder().withId("0004").addDocField(new DocField("text", "富贵功名,前缘分定,为人切莫欺心。")).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 24)).addDocField(new DocField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build();Document doc5 = Document.newBuilder().withId("0005").addDocField(new DocField("text","布大惊,与陈宫商议。宫曰:“闻刘玄德新领徐州,可往投之。")).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 25)).addDocField(new DocField("segment","布大惊,与陈宫商议。宫曰:“闻刘玄德新领徐州,可往投之。")).build();InsertParam insertParam = InsertParam.newBuilder().addDocument(doc1).addDocument(doc2).addDocument(doc3).addDocument(doc4).addDocument(doc5).withBuildIndex(true).build();AffectRes affectRes = collection.upsert(insertParam);System.out.println("\\tres: " + affectRes);
如果您无需使用腾讯云向量数据库(Tencent Cloud VectorDB)的 Embedding 功能做向量化,则可以直接写入向量数据。
// link databaseDatabase db = client.database("db-test");// link collectionCollection collection = db.collection("book-vector");// upsertDocument doc1 = Document.newBuilder().withId("0001").withVector(Arrays.asList(0.2123, 0.21, 0.213)).addDocField(new DocField("bookName", "西游记")).addDocField(new DocField("author", "吴承恩")).addDocField(new DocField("page", 21)).addDocField(new DocField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build();Document doc2 = Document.newBuilder().withId("0002").withVector(Arrays.asList(0.2123, 0.22, 0.213)).addDocField(new DocField("bookName", "西游记")).addDocField(new DocField("author", "吴承恩")).addDocField(new DocField("page", 22)).addDocField(new DocField("segment","正大光明,忠良善果弥深。些些狂妄天加谴,眼前不遇待时临。")).build();Document doc3 = Document.newBuilder().withId("0003").withVector(Arrays.asList(0.2123, 0.23, 0.213)).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 23)).addDocField(new DocField("segment", "细作探知这个消息,飞报吕布。")).build();Document doc4 = Document.newBuilder().withId("0004").withVector(Arrays.asList(0.2123, 0.24, 0.213)).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 24)).addDocField(new DocField("segment", "富贵功名,前缘分定,为人切莫欺心。")).build();Document doc5 = Document.newBuilder().withId("0005").withVector(Arrays.asList(0.2123, 0.25, 0.213)).addDocField(new DocField("bookName", "三国演义")).addDocField(new DocField("author", "罗贯中")).addDocField(new DocField("page", 25)).addDocField(new DocField("segment","布大惊,与陈宫商议。宫曰:“闻刘玄德新领徐州,可往投之。")).build();InsertParam insertParam = InsertParam.newBuilder().addDocument(doc1).addDocument(doc2).addDocument(doc3).addDocument(doc4).addDocument(doc5).withBuildIndex(true).build();collection.upsert(insertParam);
请求参数
参数名称 | 参数含义 | 子参数 | 是否必选 | 配置方法 |
Document | 指定要插入的 Document数据,是一个数组,支持单次插入一条或者多条 Document,最大可插入 1000条。 | Id | 是 | Document 主键,长度限制为[1,128]。 |
| | Vector | 否 | 表示文档的向量值,请务必使用32位浮点数存储向量数据。 说明: 如果业务无需使用腾讯云向量数据库(Tencent Cloud VectorDB)的 Embedding 功能做向量化,则配置该参数,写入向量数据,而无需配置 Embedding 参数 text (创建 Collection 时,Embedding 参数 field 对应指定的文本字段名,示例中为 text)。 |
| | DocField | 否 | text 字段为该参数为创建集合 时,Embedding 参数 field 对应指定的文本字段名。该请求示例中为 text,您可以自定义其他便于识别的字段名。 说明: 写入原始文本数据,系统会自动从该字段中提取原始文本信息,并将其转换为向量数据,并将原始文本以及转化后的向量数据一起存储在数据库中。 |
| | | | 其他标量字段,用于存储文档的其他信息。例如:bookName、author、page。 |
BuildIndex
| 指定是否需要更新索引 | - | 否 | 取值如下所示: true:需更新索引。默认值是 true。 false:不更新索引。 注意: 如果创建 Collection 选择的索引类型为 IVF 系列: 当第一次写入时,当前集合还没有向量索引,此时 BuildIndex 必须为 false。插入原始数据之后,需通过 rebuildIndex() 训练数据并重建索引。 当集合已经调用过 rebuildIndex() 创建索引后,集合已经存在向量索引,此时: 如果 BuildIndex = true,表示新写入的数据会加入到已有的 IVF 索引中,但不会更新索引结构,此时新写入的数据可以被检索到。 如果 BuildIndex = false,表示新写入的数据不会加入到已有的 IVF 索引中,此时新写入的数据无法被检索到。 |
返回信息
res: AffectRes{affectedCount=5, code=0, msg='operation success'}
参数名 | 参数含义 |
affectedCount | 插入的文档数量。 |