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

Tablestore:プレフィックスクエリ

最終更新日:May 07, 2026

プレフィックスクエリ (PrefixQuery) は、検索インデックス内でフィールドの値が指定された文字列で始まる行を検出します。

概要

PrefixQuery は、指定されたプレフィックスで始まるカラム値に一致します。クエリの動作はカラムのデータの型によって異なります。

  • Keyword:基本的な文字列データの型です。データ量が増加すると、クエリのパフォーマンスが低下します。この型は小規模データセットでのみ適しています。

  • FuzzyKeyword:プレフィックスクエリなどのあいまい検索向けに最適化されたデータの型です。データ量に関係なく、クエリのパフォーマンスが安定します。ほとんどのプレフィックスクエリのシナリオで推奨されます。

  • Text:カラム値はインデックス作成前に形態素解析されます。少なくとも 1 つのトークンが指定されたプレフィックスで始まる場合、その行は一致とみなされます。形態素解析の不確実性により、クエリ結果が予測不能になる可能性があります。このデータの型は互換性目的でのみサポートされており、注意して使用する必要があります。

データの型の選択方法

以下の表は、各データの型がプレフィックスクエリにどの程度適しているかをまとめたものです。

パフォーマンス

推奨事項

Keyword

データ量の増加に伴い低下

小規模データセットのみ

FuzzyKeyword

データ量に関係なく安定

ほとんどのシナリオで推奨

Text

形態素解析により結果が予測不能

非推奨

プレフィックス一致の例

あるカラムに hangzhoubeijingshanghai、および harbin という値が含まれていると仮定します。

  • プレフィックス hanghangzhou に一致しますが、beijingshanghai、または harbin には一致しません。

  • プレフィックス hahangzhouharbin の両方に一致します。

API

プレフィックスクエリは、Search API または ParallelScan API を使用して実行できます。クエリの種類は PrefixQuery です。

パラメーター

パラメーター

説明

query

クエリの種類です。PrefixQuery に設定します。

fieldName

ターゲット列の名前です。

prefix

カラム値と照合するプレフィックス文字列です。

Text カラムの場合、カラム値は照合前に形態素解析されます。少なくとも 1 つのトークンが指定されたプレフィックスで始まる場合、その行は一致とみなされます。

getTotalCount

一致する行の総数を返すかどうかを指定します。デフォルト値は false です。

このパラメーターを true に設定すると、クエリの遅延が増加します。

weight

クエリの重みは正の浮動小数点数である必要があります。全文検索のシナリオでは、このパラメーターは BM25 関連スコアに対するカラムの寄与度を調整します。値を大きくすると、ランキングにおけるカラムの影響力が高まります。

このパラメーターは返される結果セットには影響せず、結果内の各行の BM25 スコアにのみ影響します。

tableName

データテーブルの名前です。

indexName

検索インデックスの名前です。

columnsToGet

一致する各行に対して返すカラムを指定します。returnAll パラメーターおよび columns パラメーターを使用して設定します。

デフォルトでは、returnAllfalse です。columns が設定されていない場合、プライマリキー列のみが返されます。columns が設定されている場合、指定されたカラムのみが返されます。

すべてのカラムを返すには、returnAlltrue に設定します。

使用方法

Tablestore コンソール、コマンドラインツール、または SDK を使用してプレフィックスクエリを実行できます。開始する前に、以下の前提条件を満たしてください。

重要

FuzzyKeyword カラムに対する PrefixQuery は、現時点で Tablestore SDK のみでサポートされています。コンソールおよびコマンドラインツールは Keyword カラムのみをサポートしています。

コンソールを使用する

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

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

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

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

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

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

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

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

      説明

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

    2. 論理演算子を選択します:AndOr、または Not

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

    3. インデックスフィールドを選択し、追加 をクリックします。

    4. クエリの種類を プレフィックスクエリ (PrefixQuery) に設定し、プレフィックス値を入力します。

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

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

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

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

コマンドラインツールを使用する

検索インデックスを使用してデータのクエリを行うには、search コマンドを実行します。詳細については、「検索インデックス」をご参照ください。

重要

コマンドラインツールは、Keyword カラムに対するプレフィックスクエリのみをサポートしており、FuzzyKeyword カラムはサポートしていません。

  1. search コマンドを実行して、search_index 検索インデックスを使用してデータをクエリし、すべてのインデックス付きカラムを返します。

    search -n search_index --return_all_indexed
  2. プロンプトが表示されたら、クエリ条件を入力します。以下のコードはその例です。

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "PrefixQuery",
            "Query": {
                "FieldName": "col_keyword",
                "Prefix": "hangzhou"
            }
        }
    }

SDK を使用する

Java SDKGo SDKPython SDKNode.js SDK.NET SDK、または PHP SDK を使用してプレフィックスクエリを実行できます。以下の例は Java SDK を使用しています。

説明

検索文は Keyword 型と FuzzyKeyword 型のどちらでも同一です。唯一の違いは、クエリ対象となるカラムのデータの型です。

以下の例は、Col_Keyword カラムの値がプレフィックス "hangzhou" で始まるデータをクエリする方法を示しています。

/**
 * Col_Keyword カラムの値がプレフィックス "hangzhou" で始まるデータをクエリします。
 * @param client
 */
private static void prefixQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    PrefixQuery prefixQuery = new PrefixQuery(); // クエリの種類を PrefixQuery に設定します。
    searchQuery.setGetTotalCount(true);
    prefixQuery.setFieldName("Col_Keyword");
    prefixQuery.setPrefix("hangzhou");
    searchQuery.setQuery(prefixQuery);
    //searchQuery.setGetTotalCount(true); // 一致する行の総数を返すようにこのパラメーターを設定します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGet パラメーターを設定して、返すカラムを指定するか、すべてのカラムを返します。このパラメーターが設定されていない場合、デフォルトでプライマリキー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべてのカラムを返すように設定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 指定されたカラムを返すように設定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致する行の総数を出力します。
    System.out.println("Row: " + resp.getRows());
}

課金

多次元インデックスを使用してデータをクエリすると、読み取りスループットを消費します。詳細については、「多次元インデックスのメータリングと課金」をご参照ください。

よくある質問

関連ドキュメント