OpenSearch コンソールは、アプリケーションスキーマを定義するための4つのメソッドを提供します。OpenSearch Industry Algorithm Edition はマルチテーブルスキーマをサポートしており、プライマリテーブルと最大10個のセカンダリテーブルにわたる複雑なデータリレーションシップをモデル化できます。インデックス作成中、OpenSearch はこれらのテーブルに対して LEFT JOIN を実行し、検索インデックスが構築されるワイドテーブルを生成します。
仕組み
インデックス作成時、OpenSearch はプライマリテーブルとすべての関連付けられたセカンダリテーブルに対して LEFT JOIN を実行します。その結果、プライマリテーブルの行数と一致するワイドテーブルが生成されます。これは、プライマリレコードごとに1つの検索ドキュメントとなります。一致しないレコードを持つセカンダリテーブルフィールドには、デフォルト値が入力されます。INTフィールドには 0、STRINGフィールドには null が設定されます。
インデックスは、このワイドテーブルから構築され、すべての検索クエリに対応します。

関連付けルール
マルチテーブルスキーマを設計する際は、以下のルールに従ってください。
アプリケーションごとに1つのプライマリテーブル。 プライマリテーブルにできるのは1つのテーブルのみです。
N:1 または 1:1 のレコード比率のみ。 各プライマリテーブルレコードは、最大で1つのセカンダリテーブルレコードにマップされます。単一のプライマリレコードを複数のセカンダリレコードにマップすることはできません (1:N はサポートされていません)。
キーベースの関連付け。 セカンダリテーブルは、プライマリテーブル内の外部キーと一致する必要があるプライマリキーを介してプライマリテーブルに結合されます。プライマリテーブルの外部キーは、セカンダリテーブルのプライマリキーのみを参照できます。
同じフィールドタイプが必要。 フィールドは、同じタイプを共有している場合にのみテーブル間でマップできます。たとえば、セカンダリテーブルの INT プライマリキーは、プライマリテーブルの INT フィールドにのみマップできます。
最大2つの関連付けレベル (標準アプリケーションの場合)。排他的アプリケーションは最大3つのレベルをサポートします。
アプリケーションごとに最大10個のセカンダリテーブル。 排他的アプリケーションはこの制限を超えることができます。
サポートされている関連付けパターン
| パターン | 関連付け | サポート |
|---|---|---|
| プライマリ + 1 セカンダリ | プライマリ → セカンダリ | はい |
| プライマリ + 2 セカンダリ (チェーン) | プライマリ → B → C | はい |
| プライマリ + 複数セカンダリ (ファンアウト) | プライマリ → B、プライマリ → C、プライマリ → D (2レベル以下、10テーブル以下) | はい |
| プライマリ + 3レベルチェーン | プライマリ → B → C → D (2レベル超) | いいえ (排他的アプリケーションの場合のみ最大3レベル) |
| 循環関連付け | プライマリ → B、B → プライマリ | いいえ |
| プライマリ + 10を超えるセカンダリ | 10を超えるセカンダリテーブル | いいえ (排他的アプリケーションの場合を除く) |
![]()
![]()
![]()
使用制限と運用上の注意点
Nが大きい場合の更新遅延
プライマリとセカンダリのレコード比率が N:1 で N が大きい場合、単一のセカンダリレコードを更新すると、プライマリテーブルインデックスに対して N 回の更新がトリガーされます。これにより、両方のテーブルで更新遅延が発生する可能性があります。このリスクを最小限に抑えるには、N を10以下に保ってください。
一致しないフィールドのデフォルト値
LEFT JOIN 後、一致するプライマリレコードがないセカンダリテーブルフィールドには、ワイドテーブルにデフォルト値が入力されます。
| フィールドタイプ | デフォルト値 |
|---|---|
| INT | 0 |
| STRING | null |