重要
Table StoreJava SDK從5.17.0版本開始支援向量檢索,Go SDK請使用最新SDK版本,Python SDK從5.4.4版本開始支援向量檢索,Node.js SDK從5.5.0版本開始支援向量檢索。
您可以通過Java SDK、Go SDK、Python SDK或Node.js SDK使用向量檢索功能。此處以Java SDK為例介紹使用向量檢索的操作。
重要
使用Java SDK進行向量檢索前,您需要初始化Client。具體操作,請參見初始化Client。
以下樣本用於查詢表中與指定向量最鄰近且分數大於0.1的10個向量資料,並且最鄰近的向量需要滿足Col_Keyword列值等於"hangzhou"且Col_Long列值小於4的條件。
private static void knnVectorQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
KnnVectorQuery query = new KnnVectorQuery();
query.setFieldName("Col_Vector");
query.setTopK(10); // 返回最鄰近的topK。
query.setMinScore(0.1f); // 返回最鄰近的向量得分大於0.1的行。
query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
// 最鄰近的向量需要滿足Col_Keyword=hangzhou && Col_Long<4條件。
query.setFilter(QueryBuilders.bool()
.must(QueryBuilders.term("Col_Keyword", "hangzhou"))
.must(QueryBuilders.range("Col_Long").lessThan(4))
);
searchQuery.setQuery(query);
searchQuery.setLimit(10);
// 按照分數排序。
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setColumns(Arrays.asList("Col_Keyword", "Col_Long"));
searchRequest.setColumnsToGet(columnsToGet);
// 訪問Search介面。
SearchResponse resp = client.search(searchRequest);
for (SearchHit hit : resp.getSearchHits()) {
// 列印分數。
System.out.println(hit.getScore());
// 列印資料。
System.out.println(hit.getRow());
}
}