最近更新时间:2026-11-05 15:15:23
/**
* 创建向量索引
*
* <p>{@code dimension} 须与嵌入模型一致(1-4096),{@code dataType} 固定 {@code float32}。
* {@code metadataConfiguration.nonFilterableMetadataKeys} 指定不参与过滤的元数据键。</p>
*/
public void createIndex() {
Ks3VectorsClient client = initVectorsClient();
String bucketName = "my-vector-bucket";
String indexName = "my-index";
try {
MetadataConfiguration meta = new MetadataConfiguration();
meta.setNonFilterableMetadataKeys(Arrays.asList("raw_text"));
CreateIndexRequest indexReq = new CreateIndexRequest(bucketName, indexName, 1024, DistanceMetric.EUCLIDEAN);
indexReq.setMetadataConfiguration(meta);
CreateIndexResult result = client.createIndex(indexReq);
System.out.println("索引创建成功: " + indexName);
System.out.println("indexKrn: " + result.getIndexKrn());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException: " + e.getErrorMessage()
+ ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException: " + e.getMessage());
} finally {
client.shutdown();
}
}
/**
* 获取向量索引详细信息
*/
public void getIndex() {
Ks3VectorsClient client = initVectorsClient();
String bucketName = "my-vector-bucket";
String indexName = "my-index";
try {
GetIndexResult result = client.getIndex(
new GetIndexRequest(bucketName, indexName));
VectorIndex index = result.getIndex();
if (index != null) {
System.out.println("索引名: " + index.getIndexName());
System.out.println("indexKrn: " + index.getIndexKrn());
System.out.println("维度: " + index.getDimension());
System.out.println("距离度量: " + index.getDistanceMetric());
System.out.println("数据类型: " + index.getDataType());
System.out.println("创建时间(ms): " + index.getCreationTime());
}
} catch (Ks3ServiceException e) {
if (e.getStatusCode() == 404) {
System.out.println("索引不存在");
} else {
System.out.println("Ks3ServiceException: " + e.getErrorMessage()
+ ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
}
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException: " + e.getMessage());
} finally {
client.shutdown();
}
}
/**
* 列举向量桶下所有索引(串行分页)
*/
public void listIndexes() {
Ks3VectorsClient client = initVectorsClient();
String bucketName = "my-vector-bucket";
try {
String nextToken = null;
do {
ListIndexesResult result = client.listIndexes(
new ListIndexesRequest(bucketName)
.withMaxResults(100)
.withNextToken(nextToken));
List<VectorIndex> indexes = result.getIndexes();
if (indexes != null) {
for (VectorIndex idx : indexes) {
System.out.println(" " + idx.getIndexName()
+ " (krn=" + idx.getIndexKrn() + ")");
}
}
nextToken = result.getNextToken();
} while (nextToken != null && !nextToken.isEmpty());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException: " + e.getErrorMessage()
+ ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException: " + e.getMessage());
} finally {
client.shutdown();
}
}
/**
* 删除向量索引
*
* <p>前置条件:索引下须无向量数据,删除前建议先确认。</p>
*/
public void deleteIndex() {
Ks3VectorsClient client = initVectorsClient();
String bucketName = "my-vector-bucket";
String indexName = "my-index";
try {
Ks3Result result = client.deleteIndex(
new DeleteIndexRequest(bucketName, indexName));
System.out.println("索引删除成功: " + indexName + ", requestId=" + result.getRequestId());
} catch (Ks3ServiceException e) {
System.out.println("Ks3ServiceException: " + e.getErrorMessage()
+ ", status=" + e.getStatusCode() + ", requestId=" + e.getRequestId());
} catch (Ks3ClientException e) {
System.out.println("Ks3ClientException: " + e.getMessage());
} finally {
client.shutdown();
}
}
纯净模式
