ホームページ >バックエンド開発 >PHPチュートリアル >N:M 関係の Elasticsearch インデックス構造を設計するには?

N:M 関係の Elasticsearch インデックス構造を設計するには?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 15:14:01383ブラウズ

How to Design Elasticsearch Index Structure for N:M Relationships?

複数のエンティティ バインディング用の Elasticsearch インデックス構造のセットアップ

概要

Elasticsearch の統合 (ES) ) を既存のアプリケーションに組み込むのは、困難な作業になる可能性があります。このダイアログは、レガシー データベースで複数のエンティティ バインディングを処理するときに ES インデックス構造を設定する際の課題に対処します。

データベース構造

提供されたデータベース構造には、次の 3 つのテーブルが表示されます。製品、フラグ、および flagsProducts。製品とフラグの間の N:M 関係を表します。目標は、効率的なクエリを最適化しながら、この構造を ES で複製することです。

推奨されるアプローチ: フラット化

N:M 関係を維持するのではなく、フラット化することをお勧めします。構造を決定し、フラグ情報を埋め込んだ製品ドキュメントを作成します。このアプローチにより、クエリが簡素化され、データ アクセスが向上します。

製品ドキュメントの構造

フラット化された製品ドキュメントには、次のフィールドが含まれます:

  • id : 製品 ID (文字列、not_analyzed)
  • title: 製品タイトル (文字列)
  • price: 製品価格 (double、null_value: 0.0)
  • flags: フラグ タイトルの配列(文字列、not_analyzed)

製品ドキュメントの例:

{
   "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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。