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

Tablestore:What do I do if the "length of field value is longer than 32 for the [WILDCARD_QUERY] query" error occurs when I use wildcard query?

最終更新日:Aug 26, 2026

ワイルドカードクエリの実行中に「length of field value is longer than 32 for the [WILDCARD_QUERY] query」例外が発生した場合は、クエリ文字列を短縮するか、match phrase クエリを使用してください。

問題の説明

ワイルドカードクエリを使用してデータをクエリする際に、次の例外が発生します。

length of field value is longer than 32 for the [WILDCARD_QUERY] query

原因

ワイルドカード文字を含む文字列が 32 文字の制限を超えています。

ソリューション

クエリ文字列の短縮

クエリ文字列を短縮して、長さが 32 文字を超えないようにします。

トークン化ベースのワイルドカードクエリ

多次元インデックスは、トークン化ベースのワイルドカードクエリをサポートしており、より効率的なあいまいクエリを実現できます。トークン化ベースのワイルドカードクエリを使用する場合、クエリ文字列の長さに制限はありません。ただし、元のコンテンツは最大 1,024 文字に制限されます。この制限を超えるコンテンツは自動的に切り捨てられ、最初の 1,024 文字のみが保持されます。

  1. 多次元インデックススキーマを動的に変更します。

    ビジネスへの影響を評価した上で、対象カラムを変更するか仮想カラムを追加し、タイプを Text に、トークン化方法をあいまいトークン化に設定します。詳細については、「多次元インデックススキーマの動的変更」および「仮想カラム」をご参照ください。

  2. match phrase クエリ (MatchPhraseQuery) を使用します。

    詳細については、「トークンベースのワイルドカードクエリ」をご参照ください。

SQL ワイルドカードクエリのシナリオ

SQL 文を使用してデータをクエリする際、データテーブルに、その SQL 文に関係するすべてのデータ列を含む検索インデックスがある場合、SQL エンジンはデータクエリにこの検索インデックスを自動的に選択します。この場合、LIKE 演算子とワイルドカード文字 % を組み合わせた SQL ワイルドカードクエリなどを実行する際にも、クエリ文字列の長さが制限されます (最大 32 文字)。

この問題は、次の操作によって解決できます。

  1. 多次元インデックススキーマを動的に変更します。

    ビジネスへの影響を評価した上で、対象カラムを変更するか仮想カラムを追加し、タイプを Text に、トークン化方法をあいまいトークン化に設定します。詳細については、「多次元インデックススキーマの動的変更」および「仮想カラム」をご参照ください。

  2. 多次元インデックスのマッピングテーブルを作成します。

    次の例では、データテーブル example_table の検索インデックス example_table_index 用に、example_table__example_table_index という名前のマッピングテーブルを作成します。

    CREATE TABLE `example_table__example_table_index`(
        `pk` MEDIUMTEXT,
        `attr` MEDIUMTEXT,
        `attr_virtual` MEDIUMTEXT #virtual column
    )
    ENGINE='searchindex',
    ENGINE_ATTRIBUTE='{"index_name":"example_table_index","table_name":"example_table"}';
  3. SQL ステートメントで match phrase クエリ (TEXT_MATCH_PHRASE) を使用します。

    次の例では、多次元インデックスマッピングテーブル example_table__example_table_index 内で、仮想カラム attr_virtual の値が文字列「tablestore is super cool!」と一致するデータをクエリします。

    select * from example_table__example_table_index where TEXT_MATCH_PHRASE(attr_virtual, "tablestore is super cool!");