背景
ElasticSearch (ES) をレガシー アプリケーションと頻繁に統合するデータ構造とインデックス作成要件の違いにより、課題が生じます。複雑なリレーショナル スキーマの場合、データを非正規化しエンティティをフラット化すると、パフォーマンスが向上し、クエリが簡素化されます。
質問:
複数のエンティティ バインディング (n) を持つデータベースをフラット化するにはどうすればよいですか? :m 関係) ES で最適なインデックス作成を行うには?
解決策:
1.データの非正規化:
関連エンティティの埋め込み配列を含む、すべての関連データを含む製品ドキュメントを作成します。スキーマの例を次に示します。
{ "id": "00c8234d71c4e94f725cd432ebc04", "title": "Alpha", "price": 589.0, "flags": ["Sellout", "Top Product"] }
2.マッピング タイプ:
新しいスキーマに一致するようにマッピング タイプを構成します:
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" } } } } }
3. SQL クエリ:
関連エンティティを結合し、フラグ タイトルを連結するクエリを使用してデータベースからデータを取得します:
以上が複数のエンティティ バインディングを使用して ElasticSearch インデックス構造を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。