すべてのプロダクト
Search
ドキュメントセンター

Tablestore:KNN ベクタークエリ

最終更新日:Nov 04, 2025

k 近傍 (KNN) ベクタークエリ機能により、ベクターに基づく近似最近傍検索が可能になります。これにより、大規模なデータセット内でクエリされたベクターに最も類似したデータ項目を見つけることができます。

前提条件

使用上の注意

  • KNN ベクタークエリ機能は、バージョン 5.5.0 以降の Tablestore SDK for Node.js でサポートされています。サポートされているバージョンの Tablestore SDK for Node.js がインストールされていることを確認してください。

    説明

    Tablestore SDK for Node.js のバージョン履歴については、「Tablestore SDK for Java のバージョン履歴」をご参照ください。

  • ベクターフィールドの数とベクターフィールドのディメンション数には制限があります。 詳細については、「多次元インデックスの制限」をご参照ください。

  • 多次元インデックスサーバーには複数のパーティションがあります。多次元インデックスサーバーの各パーティションは、クエリしたいベクターに最も近い上位 K 個の近傍を返します。パーティションによって返された上位 K 個の最近傍は、クライアントノードで集約されます。トークンを使用してすべてのデータをページ単位でクエリする場合、応答の合計行数は多次元インデックスサーバーのパーティション数に関連します。

パラメーター

パラメーター

必須

説明

fieldName

はい

ベクターフィールドの名前。

topK

はい

クエリしたいベクターと最も類似度が高い上位 K 個のクエリ結果。 topK パラメーターの最大値については、「多次元インデックスの制限」をご参照ください。

重要

K の値が大きいほど、取得率、クエリのレイテンシ、およびコストが高くなります。

float32QueryVector

はい

類似度をクエリしたいベクター。

filter

いいえ

フィルター。KNN ベクタークエリ条件ではないクエリ条件の組み合わせを使用できます。

次のサンプルコードは、データテーブル内の特定のベクターの 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();

よくある質問

Tablestore KNN ベクタークエリのパフォーマンスを最適化するにはどうすればよいですか?

関連ドキュメント