重要 表格存储Java 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。
以下示例用于查询表中与指定向量最邻近的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.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());
}
}