ElasticSearch (ES) をレガシー データベースと統合する場合、効率的なクエリのためにインデックス構造を最適化することが重要です。この場合のタスクは、複雑で最適ではない構造を持つデータベースを ES に複製することです。
データベースは 3 つのテーブルで構成されています。
目標は、これを平坦化することです複数の値を維持しながら、ES でのクエリを容易にするための構造
製品とフラグ間の n:m の関係を排除するには、「」を含むフラットな製品ドキュメントを作成することをお勧めします。 flags」配列には、各製品に関連するすべてのフラグが含まれます。このアプローチにより、フラグのクエリが簡素化され、より一貫したデータ構造が提供されます。
フラット化された製品ドキュメントのサンプルは次のとおりです:
{ "id": "00c8234d71c4e94f725cd432ebc04", "title": "Alpha", "price": 589.0, "flags": ["Sellout", "Top Product"] } { "id": "018357657529fef056cf396626812", "title": "Beta", "price": 355.0, "flags": ["Discount"] } { "id": "01a2c32ceeff0fc6b7dd4fc4302ab", "title": "Gamma", "price": 0.0, "flags": ["Discount"] }
「products」インデックス タイプの対応するマッピングは次のようになります。
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" } } } } }
データベースから必要なデータをフェッチするには、次の SQL クエリを推奨します:
以上が従来のデータベースから複数エンティティの関係に合わせて ElasticSearch インデックス構造を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。