全部產品
Search
文件中心

Tablestore:使用向量檢索

更新時間:Feb 08, 2025

本文介紹如何通過控制台或SDK使用向量檢索功能查詢資料。

介面

向量檢索的介面為Search,具體的Query類型為KnnVectorQuery

參數

參數

是否必選

說明

fieldName

向量欄位名稱。

topK

查詢最鄰近的topK個值。關於最大值的說明請參見多元索引限制

重要
  • K值越大,召回率越好,但是查詢延遲和費用越高。

  • 當topK的值小於SearchQuery中limit的值時,服務端會自動把topK的值放大到limit的值。

float32QueryVector

要查詢相似性的向量。

filter

查詢過濾器,支援組合使用任意的非向量檢索的查詢條件。

使用方式

說明

如果使用向量檢索功能時遇到問題,請提交工單聯絡我們。

您可以使用控制台或者SDK進行向量檢索。進行向量檢索之前,您需要完成如下準備工作。

使用控制台

  1. 進入索引管理頁簽。

    1. 登入Table Store控制台

    2. 在頁面上方,選擇資源群組和地區。

    3. 概覽頁面,單擊執行個體名稱或在操作列單擊執行個體管理

    4. 執行個體詳情頁簽下的資料表列表頁簽,單擊資料表名稱或在操作列單擊索引管理

  2. 索引管理頁簽,單擊目標多元索引操作列的搜尋

  3. 查詢資料對話方塊,查詢資料。

    1. 系統預設返回所有列,如需顯示指定屬性列,關閉擷取所有列並輸入需要返回的屬性列,多個屬性列之間用半形逗號(,)隔開。

      說明

      系統預設會返回資料表的主鍵列。

    2. 根據需要選擇邏輯操作符為 AndOr 或者 Not

      當選擇邏輯操作符為 And 時,返回滿足指定條件的資料。當選擇邏輯操作符為 Or 時,如果配置了單個條件,則返回滿足指定條件的資料;如果配置了多個條件,則返回滿足任意一個條件的資料。當選擇邏輯操作符為 Not 時,返回不滿足指定條件的資料。

    3. 選擇向量欄位,單擊添加

    4. 設定向量欄位的查詢類型為向量檢索(KnnVectorQuery)以及輸入要查詢的向量和topK值。

      請按照介面提示輸入符合格式的向量。

    5. 系統預設關閉排序功能,如需根據指定欄位對返回結果進行排序,開啟是否排序開關後,根據需要添加要進行排序的欄位並配置排序方式。

    6. 系統預設關閉統計功能,如需對指定欄位進行資料統計,開啟是否統計開關後,根據需要添加要進行統計的欄位和配置統計資訊。

  4. 單擊確定

    符合查詢條件的資料會顯示在索引管理頁簽中。

使用SDK

重要

Table StoreJava SDK從5.17.0版本開始支援向量檢索,Go SDK請使用最新SDK版本,Python SDK從5.4.4版本開始支援向量檢索,Node.js SDK從5.5.0版本開始支援向量檢索。

您可以通過Java SDKGo SDKPython SDKNode.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());
    }
}

常見問題

如何最佳化Table Store的向量檢索效果

相關文檔