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

Tablestore:KNN ベクタークエリの使用

最終更新日:May 07, 2026

このトピックでは、Tablestore コンソールまたは Tablestore SDK を使用して k 最近傍 (KNN) ベクタークエリを実行する方法について説明します。

API

KNN ベクタークエリを実行するには、Search 操作を呼び出し、クエリタイプを KnnVectorQuery に設定します。

パラメーター

パラメーター

必須

説明

fieldName

はい

ベクトルフィールドの名前です。

topK

はい

返される最近傍の数です。最大値については、「多次元インデックスの制限事項」をご参照ください。

重要

K 値を大きくすると再現率が向上しますが、クエリの遅延とコストも増加します。

float32QueryVector

はい

類似検索で使用するクエリベクターです。

minScore

いいえ

スコアの最小しきい値です。この値より大きいスコアを持つ行のみが返されます。値は 0 以上である必要があります。デフォルト値は 0 です。

filter

いいえ

ベクトル以外のクエリ条件を任意に組み合わせて使用できるフィルターです。

操作手順

説明

KNN ベクタークエリで問題が発生した場合は、チケットを送信

Tablestore コンソールまたは SDK を使用して KNN ベクタークエリを実行できます。開始する前に、以下のタスクを完了してください。

コンソールの使用

  1. [インデックス管理] タブに移動します。

    1. Tablestore コンソールにログインします。

    2. 上部ナビゲーションバーでリソースグループとリージョンを選択します。

    3. [概要] ページでインスタンス名をクリックするか、[操作] 列の [インスタンス管理] をクリックします。

    4. [インスタンス詳細] タブの [データテーブル一覧] タブで、データテーブル名をクリックするか、[操作] 列の [インデックス管理] をクリックします。

  2. [インデックス管理] タブで、対象の検索インデックスを見つけ、[検索] を [操作] 列でクリックします。

  3. 検索 ダイアログボックスで、クエリパラメーターを設定します。

    1. デフォルトではすべての列が返されます。特定の列のみを返す場合は、[すべての列を取得] をオフにして、カンマ区切りで列名を入力します。

      説明

      デフォルトでは、Tablestore はデータテーブルのプライマリキー列を返します。

    2. 論理演算子を選択します:[And][Or]、または [Not]

      [And] を選択すると、すべての指定条件を満たすデータが返されます。[Or] を選択すると、いずれかの条件を満たすデータが返されます。[Not] を選択すると、指定条件を満たさないデータが返されます。

    3. ベクトルフィールドを選択し、追加 をクリックします。

    4. ベクトルフィールドのクエリタイプを KNN ベクタークエリ (KnnVectorQuery) に設定し、クエリベクターと topK 値を入力します。

      ページに表示されるフォーマットに従ってベクターを入力してください。

    5. デフォルトではソートは無効です。結果を特定のフィールドでソートするには、[ソートを有効化] をオンにして、ソートフィールドを追加し、ソート順を設定します。

    6. デフォルトでは集約は無効です。特定のフィールドに対して統計集約を実行するには、[集約を有効化] をオンにして、集約対象フィールドを追加し、集約設定を行います。

  4. [OK] をクリックします。

    クエリ結果は [インデックス管理] タブに表示されます。

SDK の使用

重要

KNN ベクタークエリ機能は、Tablestore SDK for Java 5.17.0 以降、Tablestore SDK for Go の最新バージョン、Tablestore SDK for Python 5.4.4 以降、および Tablestore SDK for Node.js 5.5.0 以降で利用可能です。

Java SDKGo SDKPython SDK、または Node.js SDK を使用して KNN ベクタークエリを実行できます。以下の例では Java SDK を使用しています。

重要

Java SDK を使用して KNN ベクタークエリを実行する前に、クライアントを初期化する必要があります。詳細については、「Tablestore クライアントの初期化」をご参照ください。

以下の例では、指定されたベクターに対する 10 個の最近傍を取得し、類似スコアの最小値を 0.1 に設定しています。さらに、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); // 上位 K 個の最近傍を返します。
    query.setMinScore(0.1f); // スコアが 0.1 より大きい行のみを返します。
    query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
    // 最近傍は、Col_Keyword = 'hangzhou' AND 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);
    // 検索操作を呼び出します。
    SearchResponse resp = client.search(searchRequest);
    for (SearchHit hit : resp.getSearchHits()) {
        // スコアを出力します。
        System.out.println(hit.getScore());
        // 行データを出力します。
        System.out.println(hit.getRow());
    }
}

よくある質問

Tablestore での KNN ベクタークエリのパフォーマンスを最適化する方法はありますか?

関連ドキュメント