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

Tablestore:ワイルドカード検索

最終更新日:May 07, 2026

ワイルドカード検索 (WildcardQuery) は、データベースの LIKE 演算子と同様のあいまい検索を実行します。

説明

NOT LIKE 機能を実装するには、ブール検索内で WildcardQuerymustNotQueries パラメーターと組み合わせて使用する必要があります。詳細については、「ブール検索」をご参照ください。

概要

ワイルドカード検索では、パターンマッチングに特殊文字を使用することで、検索精度と効率が向上します。

WildcardQuery 機能を使用すると、ワイルドカードを含むクエリ文字列でデータを照合できます。この機能では、アスタリスク (*) および疑問符 (?) のワイルドカードがサポートされています。アスタリスク (*) は任意の文字シーケンスを表し、疑問符 (?) は任意の 1 文字を表します。クエリ文字列はアスタリスク (*) または疑問符 (?) で開始できます。たとえば、table*e というクエリは、tablestore に一致します。

WildcardQuery は、Keyword および FuzzyKeyword データ型のフィールドでサポートされています。

  • Keyword:基本的な文字列データ型です。Keyword フィールドに対するワイルドカード検索などのあいまい検索のパフォーマンスは、大規模なデータセットでは低く、データ量が増えるにつれてさらに劣化します。

  • FuzzyKeyword:ワイルドカード検索などのあいまい検索に最適化されたデータ型です。データセットサイズが増加しても、優れた安定したパフォーマンスを維持できます。

Search Index では、さまざまなあいまい一致要件に対応するために、3 種類のワイルドカード検索を提供しています。詳細は、次の表をご参照ください。

説明

本トピックでは、Keyword 型および FuzzyKeyword 型のフィールドに対する WildcardQuery の実行方法について説明します。Text 型のフィールドに対するあいまい検索の実装方法については、「形態素解析に基づくワイルドカード検索」をご参照ください。

タイプ

クエリ方法

利点

欠点

Keyword

WildcardQuery

Elasticsearch との互換性があります。

インデックスされたデータ量が増えるにつれて、クエリパフォーマンスが劣化します。

FuzzyKeyword

WildcardQuery

データサイズが増加しても、大幅に劣化することなく、優れた安定したパフォーマンスを発揮します。

一部データが拡張されます。

Text

MatchPhraseQuery

大文字・小文字を区別しない一致をサポートします。

一部データが拡張されます。

注意事項

WildcardQuery のクエリ語は、Keyword および FuzzyKeyword フィールドのいずれにおいても、32 文字を超えてはなりません。

API

ワイルドカード検索を実行するには、Search または 並列スキャン 操作を呼び出し、クエリタイプを WildcardQuery に設定します。

パラメーター

パラメーター

説明

fieldName

クエリ対象のカラム名です。

value

ワイルドカードを含む文字列で、32 文字を超えてはなりません。

query

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

getTotalCount

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

一致した行の総数を返すと、クエリパフォーマンスに影響を与える可能性があります。

weight

全文検索におけるスコアベースのソートに使用されるクエリの重みで、正の浮動小数点数です。重みが高いほど、クエリ結果内のカラムに高いスコアが割り当てられます。

このパラメーターは返された結果のスコアに影響を与えますが、返される結果の数には影響しません。

tableName

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

indexName

Search Index の名前です。

columnsToGet

返すカラムを指定します。returnAll および columns 設定が含まれます。

デフォルトでは、returnAllfalse であり、すべてのカラムが返されないことを示します。この場合、columns を使用して返すカラムを指定できます。カラムを指定しない場合は、プライマリキー列のみが返されます。

returnAlltrue に設定すると、すべてのカラムが返されます。

使用方法

Tablestore コンソール、コマンドラインツール (CLI)、または SDK を使用してワイルドカード検索を実行できます。開始前に、以下の準備を完了してください。

重要

現在、FuzzyKeyword フィールドに対する WildcardQuery は、Tablestore SDK のみでサポートされています。

コンソールの使用

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

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

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

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

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

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

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

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

      説明

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

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

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

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

    4. インデックスフィールドのクエリタイプを WildcardQuery に設定し、ワイルドカードを含む値を入力します。

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

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

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

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

コマンドラインツールの使用

コマンドラインツール (CLI) で search コマンドを実行して、Search Index を使用してデータをクエリできます。詳細については、「Search Index」をご参照ください。

重要

CLI は現在、Keyword 型に対する WildcardQuery のみをサポートしており、FuzzyKeyword 型はサポートしていません。

  1. search コマンドを実行して、search_index 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"
            }
        }
    }

SDK の使用

Java SDKGo SDKPython SDKNode.js SDK.NET SDK、または PHP SDK を使用してワイルドカード検索を実行できます。ここでは Java SDK を例として説明します。

説明

クエリ文は 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());
}

課金

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

よくある質問

関連トピック