> ## Documentation Index
> Fetch the complete documentation index at: https://moengage.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# セグメントクエリがクエリ長エラーで失敗するのはなぜですか？

> セグメント定義が最大クエリ長を超えたために MoEngage のセグメントクエリまたはキャンペーンが失敗する問題をトラブルシューティングし、クエリのサイズを削減する方法を説明します。

## 問題

セグメントクエリがユーザー数を返さずに失敗し、そのセグメントを使用するキャンペーンも同様に失敗します。クエリが失敗する箇所に応じて、次のいずれかが表示されます。

* `'queryString' failed to satisfy constraint: Member must have length less than or equal to 262144` など、長さの制約を示す失敗理由。
* 原因が示されず、クエリの実行中に予期しないエラーが発生したことを示す一般的な失敗理由。
* セグメントが実行中の状態のままで、件数が返されない。

ドキュメントに記載されているすべてのセグメンテーションの制限内であっても、セグメントが失敗する場合があります。たとえば、1 つの定義で許可されるカスタムセグメントの最大数である 10 個のカスタムセグメントを OR で組み合わせたセグメントなどです。

## 手順

セグメント定義は実行前に単一のクエリにシリアル化され、そのシリアル化されたクエリの最大長は 256 KB（262,144 文字）です。MoEngage はクエリ全体を評価するため、この制限は完全に展開された定義に適用されます。つまり、画面に表示される条件だけでなく、定義内で参照されているすべてのカスタムセグメントの定義も含まれます。

これは[ネストの制限](/docs/ja/user-guide/segment/advanced-concepts/segment-nesting)とは別の制限です。セグメントのネストが 6 レベルを大きく下回っていてもクエリ長を超える場合があり、逆に 256 KB よりはるかに短くてもネストの制限を超える場合があります。一方の制限内に収まっていても、もう一方の制限内に収まるとは限りません。

クエリ長は、次のパターンで最も急速に増加します。

* **多数のカスタムセグメントを OR で組み合わせる。** 参照される各カスタムセグメントは、親クエリ内で独自の完全な定義に展開されます。
* **除外ブロックでカスタムセグメントを使用する。** 除外されたカスタムセグメントも含めるカスタムセグメントと同様に展開されるため、複数のカスタムセグメントの除外リストは、同じサイズの包含リストと同程度の長さを追加します。
* **多数の値が選択されたフィルター。** 携帯電話番号、商品 ID、都市名など、数百の値に一致する単一のフィルターは、複数の通常の条件を合わせたよりも多くの長さを追加する場合があります。

クエリを制限内に収めるには、削減できる長さが大きい順に以下のオプションを適用します。

1. **OR で結合したカスタムセグメントのリストを 1 つのセグメントに置き換える。** 複数のカスタムセグメントが 1 つの属性の値だけで異なる場合は、それらすべての値に一致する 1 つのフィルターを持つ単一のセグメントとして再構築します。それぞれ 1 つの言語に一致する 10 個のセグメントは、言語フィルターに 10 個の値を列挙した 1 つのセグメントになります。
2. **長い値のリストをファイルセグメントに移動する。** 識別子を[ファイルセグメント](/docs/ja/user-guide/segment/create-segments/file-segments)としてアップロードし、フィルターに値を列挙する代わりにそれを参照します。ファイルセグメントは、ネストやカスタムセグメントの制限にもカウントされません。
3. **冗長な参照をフラット化する。** 1 つか 2 つの条件を追加するためだけにカスタムセグメントを参照している場合は、それらの条件を親クエリにインライン化し、参照を削除します。
4. **セグメントとキャンペーンを分割する。** 定義が、まとめて評価する必要のないオーディエンスを対象としている場合は、2 つ以上のセグメントを作成し、それぞれに対してキャンペーンを実行します。

<Warning>
  ネストを簡素化すると、クエリ長の問題が悪化する場合があります。[Segment Nesting](/docs/ja/user-guide/segment/advanced-concepts/segment-nesting) ページの論理ルールは、条件を分配することでネストの深さを削減します。たとえば、`(X AND Y) OR Z` は `(X OR Z) AND (Y OR Z)` になり、項が繰り返されるためクエリが長くなります。すでに大きいセグメントのネストをフラット化する場合は、クエリが引き続き実行できることを確認してください。
</Warning>

セグメントを編集した後は、キャンペーンで使用する前に **Create Segment** ページからクエリを実行し、件数が返されることを確認してください。失敗しているセグメントを参照するキャンペーンは送信時に失敗するため、失敗し始めたセグメントは複数の稼働中のキャンペーンに同時に影響を与える可能性があります。

## 例

あるセグメントが、10 個のカスタムセグメントを OR で組み合わせて定義されています。各カスタムセグメントは優先言語ごとに 1 つずつあり、いずれも同じオーディエンスにフィルタリング済みです。この定義は 1 つの定義あたり 10 個のカスタムセグメントという制限内にあり、深さも 2 レベルしかありませんが、10 個の参照がそれぞれ独自の完全な定義に展開されるため、シリアル化されたクエリは 256 KB を超え、`length less than or equal to 262144` エラーで失敗します。このセグメントをターゲットとするすべての定期キャンペーンも同様に失敗します。

定義を単一のセグメント（共通のオーディエンスフィルター AND 優先言語が 10 個の値のいずれか）として再構築すると、展開された 10 個の定義が、10 個の値を持つ 1 つのフィルターに置き換えられます。クエリは件数を返し、キャンペーンは再開されます。
