ホームページ >バックエンド開発 >PHPチュートリアル >N:M 関係の Elasticsearch インデックス構造を設計するには?
複数のエンティティ バインディング用の Elasticsearch インデックス構造のセットアップ
概要
Elasticsearch の統合 (ES) ) を既存のアプリケーションに組み込むのは、困難な作業になる可能性があります。このダイアログは、レガシー データベースで複数のエンティティ バインディングを処理するときに ES インデックス構造を設定する際の課題に対処します。
データベース構造
提供されたデータベース構造には、次の 3 つのテーブルが表示されます。製品、フラグ、および flagsProducts。製品とフラグの間の N:M 関係を表します。目標は、効率的なクエリを最適化しながら、この構造を ES で複製することです。
推奨されるアプローチ: フラット化
N:M 関係を維持するのではなく、フラット化することをお勧めします。構造を決定し、フラグ情報を埋め込んだ製品ドキュメントを作成します。このアプローチにより、クエリが簡素化され、データ アクセスが向上します。
製品ドキュメントの構造
フラット化された製品ドキュメントには、次のフィールドが含まれます:
製品ドキュメントの例:
{ "id": "00c8234d71c4e94f725cd432ebc04", "title": "Alpha", "price": 589.0, "flags": ["Sellout", "Top Product"] } { "id": "018357657529fef056cf396626812", "title": "Beta", "price": 355.0, "flags": ["Discount"] }
製品マッピング タイプ
対応するES のマッピング タイプは次のようになります。
PUT products { "mappings": { "product": { "properties": { "id": { "type": "string", "index": "not_analyzed" }, "title": { "type": "string" }, "price": { "type": "double", "null_value": 0.0 }, "flags": { "type": "string", "index": "not_analyzed" } } } } }
データベースからのデータの取得
ES に取り込むためにデータベースから必要なデータを取得するには、次の SQL クエリを使用します。 :
以上がN:M 関係の Elasticsearch インデックス構造を設計するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。