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

Tablestore:一致クエリ

最終更新日:Dec 28, 2024

一致クエリを使用して、近似一致に基づいてテーブル内のデータをクエリできます。Tablestoreは、指定したアナライザータイプに基づいて、TEXTフィールドの値と一致クエリを実行するために使用するキーワードをトークン化します。このようにして、Tablestoreはトークンに基づいて一致クエリを実行できます。あいまいクエリで高パフォーマンスを確保するために、あいまいトークン化が使用されるTEXTフィールドには、一致フレーズクエリを使用することをお勧めします。

シナリオ

一致クエリを使用して、特定のフレーズを含むデータを検索できます。一致フレーズクエリをトークン化と組み合わせて使用​​すると、ビッグデータ分析、コンテンツ検索、ナレッジ管理、ソーシャルメディア分析、ログ分析、インテリジェントQ&Aシステム、コンプライアンスレビューなどの特定のシナリオで全文検索を実行できます。たとえば、eコマースプラットフォームで、タイトル、説明、またはタグに指定されたキーワードが含まれている製品のリストをすばやくクエリしたり、ログ内のエラーメッセージまたは疑わしい操作をすばやく見つけることができます。

機能

一致クエリを使用して、近似一致に基づいてテーブル内のデータをクエリできます。たとえば、行のTEXTタイプのtitle列の値が「杭州西湖風景区」で、単一単語トークン化が使用されているとします。一致クエリのキーワードを「湖風景」に設定すると、その行はクエリ条件を満たします。

一致クエリを使用する場合、クエリするフィールドの名前とキーワードを指定する必要があります。行内の少なくとも1つのトークンがキーワード内のトークンと一致する場合、その行はクエリ条件を満たします。

一致クエリを実行する場合、フィールドの値に含まれる一致するトークンの最小数、BM25ベースのキーワード関連性スコアを計算するためにクエリするフィールドに割り当てる重み、返す列、クエリ条件を満たす行の総数を返すかどうか、および返された行をソートするために使用されるメソッドを指定できます。

API操作

SearchまたはParallelScan操作を呼び出し、クエリタイプをMatchQueryに設定して、一致クエリを実行できます。

パラメータ

パラメータ

説明

fieldName

一致させるフィールドの名前。

一致クエリはTEXTフィールドに適用されます。

text

一致クエリを実行するときにフィールドの値と一致させるキーワード。

一致させるフィールドがTEXTフィールドの場合、キーワードは、検索インデックスの作成時に指定したアナライザータイプに基づいて複数のトークンにトークン化されます。検索インデックスの作成時にアナライザータイプを指定しない場合は、単一単語トークン化が実行されます。

たとえば、一致させるフィールドがTEXTフィールドで、アナライザータイプを単一単語トークン化に設定し、「this is」を検索キーワードとして使用すると、「...、this is tablestore」、「is this tablestore」、「tablestore is cool」、「this」、および「is」などのクエリ結果を取得できます。

query

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

offset

現在のクエリが開始される位置。

limit

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

特定のデータなしで、クエリ条件を満たす行の数のみをクエリするには、limitパラメータを0に設定します。

minimumShouldMatch

フィールドの値に含まれる一致するトークンの最小数。

fieldNameパラメータで指定されたフィールドの値に、少なくとも最小数の一致するトークンが含まれている場合にのみ、行が返されます。

説明

minimumShouldMatchパラメータは、OR論理演算子と組み合わせて使用する必要があります。

operator

論理演算子。デフォルトでは、ORが論理演算子として使用されます。これは、列値に少なくとも最小数の一致するトークンが含まれている場合、行がクエリ条件を満たすことを指定します。

operatorパラメータをANDに設定すると、列値にすべての一致するトークンが含まれている場合にのみ、行はクエリ条件を満たします。

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コンソールの使用

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

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

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

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

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

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

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

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

      説明

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

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

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

    3. TEXTタイプのフィールドを選択し、追加をクリックします。

    4. クエリタイプパラメータをMatchquery(matchquery)に設定し、クエリする値を入力します。

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

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_Keyword列の値が「hangzhou」と一致するテーブル内の行をクエリする方法の例を示しています。

/**
 * テーブル内で、Col_Keyword列の値が「hangzhou」と一致する行をクエリします。Tablestoreは、クエリ条件を満たす行の総数と、これらの行の一部に関する具体的なデータを返します。
 * @param client
 */
private static void matchQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    MatchQuery matchQuery = new MatchQuery(); // クエリタイプをMatchQueryに設定します。
    matchQuery.setFieldName("Col_Keyword"); // クエリする列の名前を指定します。
    matchQuery.setText("hangzhou"); // 一致させるキーワードを指定します。
    searchQuery.setQuery(matchQuery);
    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

参考資料