全部產品
Search
文件中心

:向量檢索

更新時間:Jul 03, 2024

KnnVectorQuery使用數值向量進行近似最近鄰查詢,可以在大規模資料集中找到最相似的資料項目。

目前向量檢索功能處於邀測中,預設關閉。如果需要使用該功能,請提交工單進行申請。

前提條件

注意事項

  • Table StoreNode.js SDK從5.5.0版本開始支援向量檢索功能,請確保已安裝正確的Table StoreNode.js SDK版本。

    說明

    關於Node.js SDK歷史迭代版本的更多資訊,請參見Node.js SDK歷史迭代版本

  • 向量欄位類型的個數、維度等存在限制。更多資訊,請參見多元索引限制

  • 由於多元索引服務端是多分區的,多元索引服務端的每個分區均會返回自身最鄰近的TopK個值並在協調節點進行匯總,因此如果要使用Token翻頁擷取所有資料,則擷取到的總行數與多元索引服務端的分區數有關。

參數

參數

是否必選

說明

fieldName

向量欄位名稱。

topK

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

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

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

float32QueryVector

要查詢相似性的向量。

filter

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

樣本

以下樣本用於查詢表中與指定向量最鄰近的10個向量資料,並且最鄰近的向量需要滿足col_keyword列值等於"0"且col_long列值在0到50之間的條件。

const tableName = "<TABLE_ANME>"
const indexName = "<SEARCH_INDEX_NAME>"

async function knnVectorQuery() {
    return new Promise(function (resolve, reject) {
        let params = {
            tableName: tableName,
            indexName: indexName,
            searchQuery: {
                offset: 0,
                limit: 10,
                query: {
                    queryType: TableStore.QueryType.KNN_VECTOR_QUERY,
                    query: {
                        fieldName: "col_vector",
                        topK: TableStore.Long.fromNumber(10),
                        float32QueryVector: [1.0, 1.1, 1.2, -1.3],
                        filter: {
                            queryType: TableStore.QueryType.BOOL_QUERY,
                            query: {
                                mustQueries: [
                                    {
                                        queryType: TableStore.QueryType.RANGE_QUERY,
                                        query: {
                                            fieldName: "col_long",
                                            rangeFrom: TableStore.Long.fromNumber(0),
                                            includeLower: true,
                                            rangeTo: TableStore.Long.fromNumber(50),
                                            includeUpper: true,
                                        }
                                    },
                                    {
                                        queryType: TableStore.QueryType.TERM_QUERY,
                                        query: {
                                            fieldName: "col_keyword",
                                            term: "0",
                                        }
                                    },
                                ],
                            }
                        },
                    },
                },
                sort: {
                    sorters: [
                        {
                            scoreSort: {
                                order: TableStore.SortOrder.SORT_ORDER_DESC  // 向量查詢需要按照分數逆序排序
                            }
                        }
                    ],
                },
                getTotalCount: false,
            },
            columnToGet: {
                returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
                returnNames: ["col_long", "col_keyword"]
            },
            timeoutMs: 10000,
        }
        client.search(params, function (err, data) {
            if (err) {
                console.log('search error:', err.toString());
                reject(err);
            } else {
                console.log('RequestId:', data.RequestId);
                for (let i = 0; i < data.searchHits.length; i++) {
                    let hit = data.searchHits[i]
                    console.log('Score:', hit.score, 'Row:', hit.row);
                }
                resolve(data)
            }
        });
    })
}
knnVectorQuery();

相關文檔