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

Tablestore:フレーズ一致検索

最終更新日:May 07, 2026

フレーズ一致検索は一致検索と似ていますが、フレーズ一致検索ではトークンの位置も評価されます。行がクエリ条件を満たすのは、その行内のトークンの順序および位置がキーワードに含まれるトークンの順序および位置と一致する場合のみです。クエリ対象フィールドのトークン化方式があいまいトークン化の場合、フレーズ一致検索はワイルドカード検索よりも低遅延で実行できます。

利用シーン

フレーズ一致検索を使用して、特定の語順で構成されるフレーズを含むデータを検索できます。また、形態素解析と組み合わせて、ビッグデータ分析、コンテンツ検索、パーソナライズドレコメンデーションなどの特定のシナリオで全文検索を実行できます。たとえば、コンテンツ検索では特定のフレーズを含む文章をクエリでき、チャットレコードでは特定のシーケンスで並んだメッセージを特定できます。

特徴

フレーズ一致検索では近似的な一致を使用してデータをクエリし、トークンの位置を評価します。たとえば、TEXT 型の列の値が「Hangzhou West Lake Scenic Area」である行に対して、「Hangzhou Scenic Area」というキーワードを指定した場合、一致検索ではその行が返されますが、フレーズ一致検索では返されません。「Hangzhou」と「Scenic Area」のキーワード内での距離は 0 ですが、この行の列内では「West」と「Lake」という 2 つの単語が間に存在するため、距離は 2 になります。

フレーズ一致検索を使用する際は、クエリ対象フィールド名とキーワードを指定する必要があります。行がクエリ条件を満たすのは、その行内のトークンの順序および位置がキーワードに含まれるトークンの順序および位置と一致する場合のみです。

フレーズ一致検索を実行する際は、BM25 ベースのキーワード関連性スコアの算出に使用するクエリ対象フィールドへの重み、返却する列、クエリ条件を満たす行の総数を返すかどうか、および返却結果のソート方法を指定できます。

API オペレーション

Search または ParallelScan オペレーションを呼び出し、クエリタイプを MatchPhraseQuery に設定することで、フレーズ一致検索を実行できます。

パラメーター

パラメーター

説明

fieldName

一致させるフィールド名です。

TEXT フィールドに対してフレーズ一致検索を実行できます。

text

フレーズ一致検索時にフィールド値と一致させるキーワードです。

一致対象フィールドが TEXT フィールドの場合、キーワードは多次元インデックス作成時に指定したアナライザタイプに基づいて複数のトークンに分割されます。多次元インデックス作成時にアナライザタイプを指定しなかった場合は、文字トークン化が実行されます。詳細については、「形態素解析」をご参照ください。

たとえば、「this is」というフレーズを使用してフレーズ一致検索を実行すると、「..., this is tablestore」や「this is a table」が返されますが、「this table is ...」や「is this a table」は返されません。

query

クエリのタイプです。query パラメーターを matchPhraseQuery に設定します。

offset

現在のクエリを開始する位置です。

limit

現在のクエリで返却する最大行数です。

具体的なデータではなく、クエリ条件を満たす行数のみを取得する場合は、limit パラメーターを 0 に設定します。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値は false で、クエリ条件を満たす行の総数は返されません。

このパラメーターを true に設定すると、クエリパフォーマンスが低下します。

weight

BM25 ベースのキーワード関連性スコアを計算する際に、クエリ対象フィールドに割り当てる重みです。このパラメーターは全文検索のシナリオで使用されます。クエリ対象フィールドに高い重みを指定すると、そのフィールドの BM25 ベースのキーワード関連性スコアが高くなります。このパラメーターの値は正の浮動小数点数です。

このパラメーターは返却行数には影響しませんが、クエリ結果の BM25 ベースのキーワード関連性スコアには影響します。

tableName

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

indexName

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

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。columnsToGet パラメーターには returnAll フィールドおよび columns フィールドを指定できます。

returnAll フィールドのデフォルト値は false で、すべての列が返されないことを意味します。この場合、columns フィールドを使用して返却する列を指定できます。返却する列を指定しない場合は、プライマリキー列のみが返されます。

returnAll フィールドを true に設定すると、すべての列が返されます。

注記

多次元インデックスは基本的な BM25 関連性スコアリングのみを提供し、カスタム関連性モデルには対応していません。

方法

Tablestore コンソール、Tablestore CLI、または Tablestore SDK を使用してフレーズ一致検索を実行できます。

フレーズ一致検索を実行する前に、以下の準備が完了していることを確認してください。

Tablestore コンソールの使用

Tablestore コンソールを使用してフレーズ一致検索を実行できます。

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

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

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

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

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

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

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

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

      説明

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

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

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

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

    4. インデックスフィールドのクエリタイプを フレーズ一致検索 (MatchPhraseQuery) に設定し、検索する値を入力します。

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

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

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

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

Tablestore CLI の使用

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

  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": "MatchPhraseQuery",
            "Query": {
                "FieldName": "col_text",
                "Text": "this is"
            }
        }
    }

Tablestore SDK の使用

以下の Tablestore SDK を使用してフレーズ一致検索を実行できます:Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、および Tablestore SDK for PHP。ここでは、Tablestore SDK for Java を使用した例を示します。

次のサンプルコードは、データテーブル内で Col_Text 列の値が「hangzhou shanghai」というフレーズ全体を指定された順序で一致する行をクエリする方法の例です。

/**
 * Query the rows in which the value of the Col_Text column matches the whole phrase "hangzhou shanghai" in order in the data table. Tablestore returns the total number of rows that meet the query conditions and the specific data of some of these rows. 
 * @param client
 */
private static void matchPhraseQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    MatchPhraseQuery matchPhraseQuery = new MatchPhraseQuery(); // Set the query type to MatchPhraseQuery. 
    matchPhraseQuery.setFieldName("Col_Text"); // Specify the name of the column to query. 
    matchPhraseQuery.setText("hangzhou shanghai"); // Specify the keyword that you want to match. 
    searchQuery.setQuery(matchPhraseQuery);
    searchQuery.setOffset(0); // Set the offset parameter to 0. 
    searchQuery.setLimit(20); // Set limit to 20 to return up to 20 rows. 
    //searchQuery.setGetTotalCount(true); // Specify that the total number of matched rows is returned. 

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery); 
    // You can configure the columnsToGet parameter to specify the columns to return or specify that all columns are returned. If you do not configure this parameter, only the primary key columns are returned. 
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // Specify that all columns are returned. 
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // Specify the columns that you want to return. 
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // Specify that the total number of matched rows instead of the number of returned rows is displayed. 
    System.out.println("Row: " + resp.getRows());
}

課金

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

よくある質問

関連ドキュメント