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

Tablestore:KNN ベクタークエリを使用する

最終更新日:Mar 04, 2025

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

API 操作

Search 操作を呼び出し、クエリタイプを KnnVectorQuery に設定することで、KNN ベクタークエリ機能を使用できます。

パラメーター

パラメーター

必須

説明

fieldName

はい

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

topK

はい

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

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

  • topK パラメーターの値が SearchQuery の limit パラメーターの値より小さい場合、サーバーは自動的に limit パラメーターの値を topK パラメーターの値として使用します。

float32QueryVector

はい

類似度をクエリするベクター。

filter

いいえ

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

メソッド

説明

KNN ベクタークエリ機能の使用中に例外が発生した場合は、チケットを送信 してください。

Tablestore コンソールまたは Tablestore SDK を使用して、KNN ベクタークエリ機能を使用できます。 KNN ベクタークエリ機能を使用してデータをクエリする前に、次の要件が満たされていることを確認してください。

Tablestore コンソールの使用

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

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

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

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

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

  2. [インデックス] タブで、データのクエリに使用する多次元インデックスを見つけ、[操作] 列の [データの管理] をクリックします。

  3. [検索] ダイアログボックスで、クエリ条件を指定します。

    1. デフォルトでは、システムはすべての属性列を返します。 特定の属性列を返すには、[すべての列] をオフにして、返す属性列を指定します。 複数の属性列はコンマ (,) で区切ります。

      説明

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

    2. ビジネス要件に基づいて、[and][or]、または [not] 論理演算子を選択します。

      [and] 論理演算子を選択すると、クエリ条件を満たすデータが返されます。 [or] 演算子を選択して単一のクエリ条件を指定すると、クエリ条件を満たすデータが返されます。 Or 論理演算子を選択して複数のクエリ条件を指定すると、いずれかのクエリ条件を満たすデータが返されます。 [not] 論理演算子を選択すると、クエリ条件を満たさないデータが返されます。

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

    4. [クエリタイプ] パラメーターを [KNN ベクタークエリ (knnvectorquery)] に設定し、クエリするベクターと topK パラメーターの値を入力します。

      指示に従って、有効な形式でベクターを入力します。

    5. デフォルトでは、ソート機能は無効になっています。 クエリ結果を特定のフィールドに基づいてソートする場合は、[ソート] をオンにして、クエリ結果のソート基準となるフィールドとソート順を指定します。

    6. デフォルトでは、集約機能は無効になっています。 特定のフィールドの統計を収集する場合は、[統計の収集] をオンにして、統計を収集するフィールドを指定し、統計の収集に必要な情報を設定します。

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

    クエリ条件を満たすデータが、[インデックス] タブに指定された順序で表示されます。

Tablestore SDK の使用

重要

KNN ベクタークエリ機能は、Tablestore SDK for Java V5.17.0 以降、最新バージョンの Tablestore SDK for Go、Tablestore SDK for Python V5.4.4 以降、および Tablestore SDK for Node.js V5.5.0 以降でサポートされています。

Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for Python、または Tablestore SDK for Node.js を使用して、KNN ベクタークエリ機能を使用できます。 この例では、Tablestore SDK for Java を使用します。

重要

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

次のサンプルコードは、指定されたベクターと最も類似度の高い上位 10 件のベクターをテーブルでクエリする方法の例を示しています。 この例では、上位 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); // 指定されたベクターと最も類似度の高い上位 10 件のベクターをテーブルで返します。
    query.setFloat32QueryVector(new float[]{0.1f, 0.2f, 0.3f, 0.4f});
    // 上位 10 件のベクターのクエリ条件を指定します。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());
    }
}

FAQ

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

関連情報