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

Tablestore:一致フレーズクエリ

最終更新日:Dec 28, 2024

一致フレーズクエリは一致クエリに似ていますが、一致フレーズクエリはトークンの位置を評価する点が異なります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象のフィールドのトークン化方法がファジートークン化の場合、一致フレーズクエリはワイルドカードクエリよりも低いレイテンシで実行されます。

シナリオ

一致フレーズクエリを使用すると、単語が特定の順序で配置された特定のフレーズを含むデータを検索できます。一致フレーズクエリをトークン化と組み合わせて使用​​すると、ビッグデータ分析、コンテンツ検索、パーソナライズされたレコメンデーションなどの特定のシナリオで全文検索を実行できます。たとえば、コンテンツ検索で特定のフレーズを含む文をクエリしたり、チャットレコードで特定の順序で配置されたメッセージを見つけたりできます。

機能

一致フレーズクエリは、近似一致を使用してデータをクエリし、トークンの位置を評価します。たとえば、行の TEXT タイプの列の値が「杭州西湖風景区」で、指定したキーワードが「杭州風景区」であるとします。一致クエリを使用すると、Tablestore は行を返します。ただし、一致フレーズクエリを使用すると、Tablestore は行を返しませ ん。キーワードの「杭州」と「風景区」の間の距離は 0 ですが、この行の列の距離は 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

クエリのタイプ。クエリパラメータを 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. Tablestore コンソールにログオンします。

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

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

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

  2. インデックスタブで、データのクエリに使用する検索インデックスを見つけ、アクション列のデータの管理をクリックします。

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

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

      説明

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

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

      And論理演算子を選択すると、クエリ条件を満たすデータが返されます。Or演算子を選択して単一のクエリ条件を指定すると、そのクエリ条件を満たすデータが返されます。 Or 論理演算子を選択して複数のクエリ条件を指定すると、いずれかのクエリ条件を満たすデータが返されます。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 .NETTablestore SDK for PHP。この例では、Tablestore SDK for Java を使用します。

次のサンプルコードは、データテーブルで Col_Text 列の値がフレーズ全体「hangzhou shanghai」と順番に一致する行をクエリする方法の例を示しています。

/**
 * データテーブルで Col_Text 列の値がフレーズ全体「hangzhou shanghai」と順番に一致する行をクエリします。Tablestore は、クエリ条件を満たす行の総数と、これらの行の一部に関する特定のデータを返します。
 * @param client
 */
private static void matchPhraseQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    MatchPhraseQuery matchPhraseQuery = new MatchPhraseQuery(); // クエリタイプを MatchPhraseQuery に設定します。
    matchPhraseQuery.setFieldName("Col_Text"); // クエリ対象の列名を指定します。
    matchPhraseQuery.setText("hangzhou shanghai"); // 一致させるキーワードを指定します。
    searchQuery.setQuery(matchPhraseQuery);
    searchQuery.setOffset(0); // offset パラメータを 0 に設定します。
    searchQuery.setLimit(20); // limit を 20 に設定して、最大 20 行を返します。
    //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());
}

請求ルール

検索インデックスを使用してデータをクエリする場合、消費された読み取りスループットに対して課金されます。詳細については、検索インデックスの課金対象項目を参照してください。

FAQ

参考資料