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

Tablestore:ワイルドカードクエリ

最終更新日:Dec 28, 2024

ワイルドカードクエリを使用してあいまいクエリを実行できます。ワイルドカードクエリはLIKE演算子に似ており、テキスト内の単語または句を含むデータをクエリするために使用できます。

説明

NOT LIKE演算子を使用する場合は、ワイルドカードクエリをブールクエリのmustNotQueriesパラメータと一緒に使用する必要があります。詳細については、ブールクエリを参照してください。

機能概要

ワイルドカードクエリでは、特定の記号を使用してあいまい一致を実行できます。これにより、データ検索の精度と効率が向上します。

ワイルドカードクエリを使用してデータをクエリする場合、アスタリスク(*)および疑問符(?)ワイルドカード文字を含む文字列を使用して、データと一致させることができます。アスタリスク(*)ワイルドカード文字は、検索語の前、後、または任意の位置にある任意の長さの文字列と一致します。疑問符(?)ワイルドカード文字は、特定の位置にある1文字と一致します。クエリ文字列は、アスタリスク(*)または疑問符(?)で始めることができます。たとえば、table*e文字列を検索すると、tablestoreが一致となります。

Keyword型とFuzzyKeyword型は、ワイルドカードクエリをサポートしています。

  • Keyword:文字列の基本データ型。Keyword型を使用する場合、中規模および大規模データに対するワイルドカードクエリなどのあいまいクエリの性能は低くなります。データサイズが大きくなると、性能は低下します。

  • FuzzyKeyword:ワイルドカードクエリなどのあいまいクエリ用に最適化されたデータ型。FuzzyKeyword型は、データサイズに関係なく、Keyword型よりも優れた安定したクエリ性能を提供します。データサイズが大きくなっても、性能は低下しません。

さまざまなシナリオであいまいクエリの要件を満たすために、検索インデックスは3種類のワイルドカードクエリを提供します。次の表に、3種類のワイルドカードクエリを示します。

説明

このトピックでは、Keyword型とFuzzyKeyword型に基づくワイルドカードクエリについて説明します。Text型に基づくあいまいクエリの詳細については、あいまいクエリを参照してください。

データ型

クエリメソッド

利点

欠点

Keyword

WildcardQuery

Elasticsearchとの互換性

インデックスデータのサイズが大きくなると、クエリ性能が低下します。

FuzzyKeyword

WildcardQuery

性能が良好で安定しており、データサイズが大きくなっても低下しません。

データの拡張が発生します。

Text

MatchPhraseQuery

Text型のデータでは大文字と小文字を区別しないようにできます。

データの拡張が発生します。

使用上の注意

Keyword型またはFuzzyKeyword型のデータに対するワイルドカードクエリにおけるクエリ文字列の長さは、32文字を超えることはできません。

API操作

ワイルドカードクエリを実行するには、Search操作またはParallelScan操作を呼び出し、クエリタイプをWildcardQueryに設定します。

パラメータ

パラメータ

説明

fieldName

クエリするフィールドの名前。

value

ワイルドカード文字を含む文字列。文字列は32文字を超えることはできません。

query

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

getTotalCount

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

このパラメータをtrueに設定すると、クエリ性能が低下します。

weight

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

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

tableName

データテーブルの名前。

indexName

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

columnsToGet

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

returnAllフィールドのデフォルト値はfalseで、すべての列が返されるわけではないことを指定します。この場合、columnsフィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。

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

メソッド

Tablestoreコンソール、Tablestore CLI、またはTablestore SDKを使用して、ワイルドカードクエリを実行できます。ワイルドカードクエリを実行する前に、次の準備が整っていることを確認してください。

重要

FuzzyKeyword型のデータに対してワイルドカードクエリを実行するには、Tablestore SDKのみを使用できます。

Tablestoreコンソールの使用

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

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

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

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

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

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

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

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

      説明

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

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

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

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

    4. クエリタイプパラメータをWildcardquery(ワイルドカードクエリ)に設定し、ワイルドカード文字を含む値を入力します。

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

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

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

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

Tablestore CLIの使用

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

重要

Tablestore CLIを使用してKeyword型のデータに対してのみワイルドカードクエリを実行できます。Tablestore CLIを使用して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": "WildcardQuery",
            "Query": {
                "FieldName": "col_keyword",
                "Value": "hang*u"
            }
        }
    }

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を使用します。

説明

Keyword型のデータに対するワイルドカードクエリのクエリステートメントは、FuzzyKeyword型のデータに対するワイルドカードクエリのクエリステートメントと同じです。ただし、クエリするフィールドの型が異なります。

次のサンプルコードは、Col_Keyword列の値が「hang*u」パターンと一致する行をクエリする方法の例を示しています。

/**
 * Col_Keyword列の値が「hang*u」パターンと一致する行をテーブルで検索します。
 * @param client
 */
private static void wildcardQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    WildcardQuery wildcardQuery = new WildcardQuery(); // WildcardQueryを使用します。
    wildcardQuery.setFieldName("Col_Keyword");
    wildcardQuery.setValue("hang*u"); // wildcardQueryに1つ以上のワイルドカード文字を含む文字列を指定します。
    searchQuery.setQuery(wildcardQuery);
    //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

参考資料