使用向量檢索

更新時間:
Copy as MD

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

介面

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

參數

參數

是否必選

說明

fieldName

向量欄位名稱。

topK

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

重要

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

float32QueryVector

要查詢相似性的向量。

minScore

score閾值,返回的行得分均大於該值。取值必須大於等於0,預設值為0。

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 SDK5.17.0版本開始支援向量檢索,Go SDK請使用最新SDK版本,Python SDK5.4.4版本開始支援向量檢索,Node.js SDK5.5.0版本開始支援向量檢索。

您可以通過Java SDKGo SDKPython SDKNode.js SDK使用向量檢索功能。此處以Java SDK為例介紹使用向量檢索的操作。

重要

使用Java SDK進行向量檢索前,您需要初始化Client。具體操作,請參見初始化Client

以下樣本用於查詢表中與指定向量最鄰近且分數大於0.110個向量資料,並且最鄰近的向量需要滿足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());
    }
}

常見問題

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

相關文檔