Skip to content

Commit eeea8ae

Browse files
author
anyihao
committed
2.2.0
1 parent b14251a commit eeea8ae

30 files changed

+36641
-19095
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ You can use **Apache Maven** or **Gradle**/**Grails** to download the SDK.
2424
<dependency>
2525
<groupId>com.tencent.tcvectordb</groupId>
2626
<artifactId>vectordatabase-sdk-java</artifactId>
27-
<version>2.1.3</version>
27+
<version>2.2.0</version>
2828
</dependency>
2929
```
3030

3131
- Gradle/Grails
3232

3333
```gradle
34-
compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.1.3'
34+
compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.2.0'
3535
```
3636

3737
### Examples

tcvectordb/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>com.tencent.tcvectordb</groupId>
66
<artifactId>vectordatabase-sdk-java</artifactId>
7-
<version>2.1.3</version>
7+
<version>2.2.0</version>
88
<packaging>jar</packaging>
99

1010
<name>vectordatabase-sdk-java</name>

tcvectordb/src/main/java/com/tencent/tcvectordb/client/VectorDBClient.java

+198
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.tencent.tcvectordb.model.param.entity.SearchRes;
3535
import com.tencent.tcvectordb.model.param.enums.DataBaseTypeEnum;
3636
import com.tencent.tcvectordb.model.param.enums.ReadConsistencyEnum;
37+
import com.tencent.tcvectordb.model.param.user.*;
3738
import com.tencent.tcvectordb.service.HttpStub;
3839
import com.tencent.tcvectordb.service.Stub;
3940
import com.tencent.tcvectordb.service.param.*;
@@ -244,6 +245,71 @@ public Collection createCollectionIfNotExists(String databaseName, CreateCollect
244245
return param;
245246
}
246247

248+
/**
249+
* list collection of database
250+
* @param databaseName: database's name
251+
* @return List<Collection>: the list of collection
252+
* @throws VectorDBException
253+
*/
254+
public List<Collection> listCollections(String databaseName) throws VectorDBException {
255+
List<Collection> collections = stub.listCollections(databaseName);
256+
collections.forEach(c -> {
257+
c.setStub(stub);
258+
c.setReadConsistency(readConsistency);
259+
});
260+
return collections;
261+
}
262+
263+
/**
264+
* truncate collection
265+
* @param collectionName
266+
* @return
267+
*/
268+
public AffectRes truncateCollections(String databaseName, String collectionName) {
269+
return stub.truncateCollection(databaseName, collectionName, DataBaseTypeEnum.BASE_DB);
270+
}
271+
272+
/**
273+
* describe collection
274+
* @param collectionName
275+
* @return Collection if collection exist
276+
* @throws VectorDBException
277+
*/
278+
public Collection describeCollection(String databaseName, String collectionName) throws VectorDBException {
279+
Collection collection = stub.describeCollection(databaseName, collectionName);
280+
collection.setStub(stub);
281+
collection.setReadConsistency(readConsistency);
282+
return collection;
283+
}
284+
285+
/**
286+
* drop collection
287+
* @param collectionName
288+
* @throws VectorDBException
289+
*/
290+
public void dropCollection(String databaseName, String collectionName) throws VectorDBException {
291+
stub.dropCollection(databaseName, collectionName);
292+
}
293+
294+
/**
295+
* set alias for collection
296+
* @param collectionName
297+
* @param aliasName
298+
* @return
299+
*/
300+
public AffectRes setAlias(String databaseName, String collectionName, String aliasName) {
301+
return stub.setAlias(databaseName, collectionName, aliasName);
302+
}
303+
304+
/**
305+
* delete alias of collection
306+
* @param aliasName
307+
* @return
308+
*/
309+
public AffectRes deleteAlias(String databaseName, String aliasName) {
310+
return stub.deleteAlias(databaseName, aliasName);
311+
}
312+
247313
/**
248314
* upsert document
249315
* @param database: database name
@@ -297,6 +363,7 @@ public AffectRes upsert(String database, String collection, InsertParam param) t
297363
* filter(Filter): filter rows before return result
298364
* document_ids(List): filter rows by id list
299365
* output_fields(List): return columns by column name list
366+
* sort(OrderRule): sort rows by OrderRule{fieldName, direction} before return result
300367
* @return List<Document>
301368
* @throws VectorDBException
302369
*/
@@ -458,6 +525,14 @@ public BaseRes AddIndex(String database, String collection, AddIndexParam addInd
458525
new AddIndexParamInner(database, collection, addIndexParam));
459526
}
460527

528+
/**
529+
* rebuild index
530+
* @param rebuildIndexParam: rebuild index param
531+
* @return BaseRes
532+
*/
533+
public BaseRes rebuildIndex(String database, String collection, RebuildIndexParam rebuildIndexParam) {
534+
return this.stub.rebuildIndex(new RebuildIndexParamInner(database, collection, rebuildIndexParam));
535+
}
461536

462537
/**
463538
* Used to add a scalar field index to an existing collection
@@ -513,4 +588,127 @@ public BaseRes modifyVectorIndex(String database, String collection, ModifyVecto
513588
new ModifyIndexParamInner(database, collection, modifyVectorIndexParam), false);
514589
}
515590

591+
/**
592+
* create user
593+
* @param username: user name to create
594+
* @param password: The password of user.
595+
* @return BaseRes.class: {code: 0, msg: "operation success"}
596+
* @throws VectorDBException
597+
*/
598+
public BaseRes createUser(String username, String password) throws VectorDBException {
599+
return this.stub.createUser(
600+
new UserCreateParam(username, password));
601+
}
602+
603+
604+
/**
605+
* grant user to database
606+
* @param param: UserGrantParam.class:
607+
* user (str): The user to grant permission.
608+
* privileges (str): The privileges to grant. For example:
609+
* {
610+
* "resource": "db0.*",
611+
* "actions": ["read"]
612+
* }
613+
* for example:
614+
* UserGrantParam.newBuilder()
615+
* .withUser(user_test)
616+
* .withPrivileges(Arrays.asList(
617+
* PrivilegeParam.newBuilder().withResource("java-sdk-test-user-permission.*").withActions(Arrays.asList("read")).build(),
618+
* PrivilegeParam.newBuilder().withResource("java-sdk-test-user-permission.*").withActions(Arrays.asList("readWrite")).build()))
619+
* .build()
620+
* @return BaseRes.class: {code: 0, msg: "operation success"}
621+
* @throws VectorDBException
622+
*/
623+
public BaseRes grantToUser(UserGrantParam param) throws VectorDBException {
624+
return this.stub.grantToUser(param);
625+
}
626+
627+
628+
/**
629+
* revoke user from database
630+
* @param param: UserRevokeParam.class:
631+
* user (str): The user to grant permission.
632+
* privileges (str): The privileges to grant. For example:
633+
* {
634+
* "resource": "db0.*",
635+
* "actions": ["read"]
636+
* }
637+
* for example:
638+
* UserRevokeParam.newBuilder()
639+
* .withUser(user_test)
640+
* .withPrivileges(Arrays.asList(
641+
* PrivilegeParam.newBuilder().withResource("java-sdk-test-user-permission.*").withActions(Arrays.asList("read")).build(),
642+
* PrivilegeParam.newBuilder().withResource("java-sdk-test-user-permission.*").withActions(Arrays.asList("readWrite")).build()))
643+
* .build()
644+
* @return BaseRes.class: {code: 0, msg: "operation success"}
645+
* @throws VectorDBException
646+
*/
647+
public BaseRes revokeFromUser(UserRevokeParam param) throws VectorDBException {
648+
return this.stub.revokeFromUser(param);
649+
}
650+
651+
652+
/**
653+
* describe user
654+
* @param user: user name to describe
655+
* @return UserDescribeRes.class:
656+
* {
657+
* "user": "test_user",
658+
* "createTime": "2024-10-01 00:00:00",
659+
* "privileges": [
660+
* {
661+
* "resource": "db0.*",
662+
* "actions": ["read"]
663+
* }
664+
* ]
665+
* }
666+
* @throws VectorDBException
667+
*/
668+
public UserDescribeRes describeUser(String user) throws VectorDBException {
669+
return this.stub.describeUser(new UserDescribeParam(user));
670+
}
671+
672+
/**
673+
* list user
674+
* @return UserListRes.class:
675+
* {
676+
* "users": [
677+
* "user": "test_user",
678+
* "createTime": "2024-10-01 00:00:00",
679+
* "privileges": [
680+
* {
681+
* "resource": "db0.*",
682+
* "actions": ["read"]
683+
* }
684+
* ]
685+
* ]
686+
* }
687+
* @throws VectorDBException
688+
*/
689+
public UserListRes listUser() throws VectorDBException {
690+
return this.stub.listUser();
691+
}
692+
693+
/**
694+
* drop user
695+
* @param user: user name to drop
696+
* @return baseRes.class: {code: 0, msg: "operation success"}
697+
* @throws VectorDBException
698+
*/
699+
public BaseRes dropUser(String user) throws VectorDBException {
700+
return this.stub.dropUser(new UserDropParam(user));
701+
}
702+
703+
/**
704+
* change user password
705+
* @param user: user name to change password
706+
* @param password: <PASSWORD>
707+
* @return baseRes.class: {code: 0, msg: "operation success"}
708+
* @throws VectorDBException
709+
*/
710+
public BaseRes changePassword(String user, String password) throws VectorDBException {
711+
return this.stub.changeUserPassword(UserChangePasswordParam.newBuilder().withUser(user).withPassword(password).build());
712+
}
713+
516714
}

tcvectordb/src/main/java/com/tencent/tcvectordb/examples/CommonService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ private static ConnectParam initConnectParam() {
6161
*/
6262
public static VectorDBClient initClient() {
6363
// 创建http client
64-
// return new VectorDBClient(initConnectParam(), ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
64+
return new VectorDBClient(initConnectParam(), ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
6565
// 创建rpc client
66-
return new RPCVectorDBClient(initConnectParam(), ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
66+
// return new RPCVectorDBClient(initConnectParam(), ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
6767
}
6868

6969
/**

tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExample.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,16 @@
2020

2121
package com.tencent.tcvectordb.examples;
2222

23-
import com.fasterxml.jackson.core.type.TypeReference;
23+
2424
import com.tencent.tcvectordb.client.VectorDBClient;
2525
import com.tencent.tcvectordb.model.*;
2626
import com.tencent.tcvectordb.model.Collection;
2727
import com.tencent.tcvectordb.model.param.collection.*;
2828
import com.tencent.tcvectordb.model.param.dml.*;
2929
import com.tencent.tcvectordb.model.param.entity.AffectRes;
3030
import com.tencent.tcvectordb.model.param.entity.BaseRes;
31+
import com.tencent.tcvectordb.model.param.enums.OrderEnum;
3132
import com.tencent.tcvectordb.utils.JsonUtils;
32-
import org.json.JSONObject;
3333

3434
import java.util.*;
3535
/**
@@ -263,6 +263,7 @@ private static void queryData(VectorDBClient client) {
263263
// .addAllOutputFields("id", "bookName")
264264
// 是否返回 vector 数据
265265
.withRetrieveVector(false)
266+
.withSort(OrderRule.newBuilder().withFieldName("page").withDirection(OrderEnum.DESC).build())
266267
.build();
267268
List<Document> qdos = collection.query(queryParam);
268269
for (Document doc : qdos) {
@@ -305,6 +306,7 @@ private static void queryData(VectorDBClient client) {
305306
.addVector(Arrays.asList(0.2123, 0.23, 0.213))
306307
// 若使用 HNSW 索引,则需要指定参数ef,ef越大,召回率越高,但也会影响检索速度
307308
.withParams(new HNSWSearchParams(100))
309+
.withRadius(0.5)
308310
// 指定 Top K 的 K 值
309311
.withLimit(10)
310312
// 过滤获取到结果
@@ -457,6 +459,7 @@ MetricType.COSINE, new HNSWParams(16, 200)))
457459
.addField(new FilterIndex("author", FieldType.String, IndexType.FILTER))
458460
.addField(new FilterIndex("array_test", FieldType.Array, IndexType.FILTER))
459461
.addField(new FilterIndex("expired_at", FieldType.Uint64, IndexType.FILTER))
462+
.addField(new FilterIndex("page", FieldType.Uint64, IndexType.FILTER))
460463
// 创建ttl配置 非必填
461464
.withTtlConfig(TTLConfig.newBuilder().WithEnable(true).WithTimeField("expired_at").build())
462465
.build();

tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExampleWithAI_doc.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,17 @@ public static void main(String[] args) throws Exception {
6767
// loadAndSplitTextUseInputStream(client, new FileInputStream(System.getProperty("file_path")), file.length(), "腾讯云向量数据库.md", metaDataMap);
6868

6969
// 使用文件路径上传文档
70-
loadAndSplitText(client, System.getProperty("file_path"), "documentSetName", metaDataMap);
70+
loadAndSplitText(client, System.getProperty("file_path"), "腾讯云向量数据库.md", metaDataMap);
7171
// support markdown, pdf, pptx, docx document
7272
// loadAndSplitText(client, System.getProperty("file_path"), "腾讯云向量数据库.pdf", metaDataMap);
7373
// loadAndSplitText(client, System.getProperty("file_path"), "腾讯云向量数据库.pptx", metaDataMap);
7474
// loadAndSplitText(client, System.getProperty("file_path"), "腾讯云向量数据库.docx", metaDataMap);
7575

7676
// 解析加载文件需要等待时间
77-
Thread.sleep(1000 * 20);
77+
Thread.sleep(1000 * 10);
7878

7979
queryData(client);
80-
GetFile(client, "tcvdb.pdf");
80+
GetFile(client, "腾讯云向量数据库.md");
8181
updateAndDelete(client);
8282
deleteAndDrop(client);
8383
}
@@ -172,9 +172,9 @@ private static void queryData(VectorDBClient client) {
172172
System.out.println("---------------------- query ----------------------");
173173
CollectionViewQueryParam queryParam = CollectionViewQueryParam.newBuilder().
174174
withLimit(2).
175-
withFilter(new Filter(Filter.in("author", Arrays.asList("Tencent", "tencent")))
176-
.and(Filter.include("tags", Arrays.asList("AI", "Embedding")))).
177-
withDocumentSetNames(Arrays.asList("tcvdb.pdf"))
175+
// withFilter(new Filter(Filter.in("author", Arrays.asList("Tencent", "tencent")))
176+
// .and(Filter.include("tags", Arrays.asList("AI", "Embedding")))).
177+
withDocumentSetNames(Arrays.asList("腾讯云向量数据库.md"))
178178
// .withOutputFields(Arrays.asList("textPrefix", "author", "tags"))
179179
.build();
180180
List<DocumentSet> qdos = collectionView.query(queryParam);
@@ -184,7 +184,7 @@ private static void queryData(VectorDBClient client) {
184184

185185
System.out.println("---------------------- get chunks ----------------------");
186186
System.out.println("get chunks res :");
187-
System.out.println(JsonUtils.toJsonString(collectionView.getChunks(null, "tcvdb.pdf", 60, 0)));
187+
System.out.println(JsonUtils.toJsonString(collectionView.getChunks(null, "腾讯云向量数据库.md", 60, 0)));
188188

189189
// search
190190
// 1. search 用于检索数据
@@ -202,7 +202,7 @@ private static void queryData(VectorDBClient client) {
202202
.withSearchContentOption(option)
203203
.withFilter(new Filter(Filter.in("author", Arrays.asList("Tencent", "tencent")))
204204
.and(Filter.include("tags", Arrays.asList("AI", "Embedding"))).getCond())
205-
.withDocumentSetName(Arrays.asList("tcvdb.pdf"))
205+
.withDocumentSetName(Arrays.asList("腾讯云向量数据库.md"))
206206
.build();
207207
// System.out.println(qdos.get(0).search(searchByContentsParam).toString());
208208
List<SearchContentInfo> searchRes = collectionView.search(searchByContentsParam);
@@ -222,7 +222,7 @@ private static void updateAndDelete(VectorDBClient client) throws InterruptedExc
222222
Filter filterParam = new Filter("author=\"Tencent\"");
223223
CollectionViewConditionParam updateParam = CollectionViewConditionParam
224224
.newBuilder()
225-
.withDocumentSetNames(Arrays.asList("tcvdb.pdf"))
225+
.withDocumentSetNames(Arrays.asList("腾讯云向量数据库.md"))
226226
.withFilter(filterParam)
227227
.build();
228228
Map<String, Object> updateFieldValues = new HashMap<>();
@@ -240,7 +240,7 @@ private static void updateAndDelete(VectorDBClient client) throws InterruptedExc
240240
Filter filterParam1 = new Filter("author=\"tencent\"");
241241
CollectionViewConditionParam build = CollectionViewConditionParam
242242
.newBuilder()
243-
.withDocumentSetNames(Arrays.asList("tcvdb.pdf"))
243+
.withDocumentSetNames(Arrays.asList("腾讯云向量数据库.md"))
244244
.withFilter(filterParam1)
245245
.build();
246246
AffectRes affectRes = collectionView.deleteDocumentSets(build);

tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExampleWithEmbedding.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ MetricType.COSINE, new HNSWParams(16, 200)))
428428
.withEmbedding(
429429
Embedding
430430
.newBuilder()
431-
.withModel(BGE_BASE_ZH)
431+
.withModelName("bge-base-zh")
432432
.withField("text")
433433
.withVectorField("vector")
434434
.build())

0 commit comments

Comments
 (0)