ホームページ > データベース > mysql チュートリアル > 従来のデータベースから複数エンティティの関係に合わせて ElasticSearch インデックス構造を最適化する方法

従来のデータベースから複数エンティティの関係に合わせて ElasticSearch インデックス構造を最適化する方法

Patricia Arquette
リリース: 2024-12-01 13:56:11
オリジナル
275 人が閲覧しました

How to Optimize ElasticSearch Index Structure for Multi-Entity Relationships from a Legacy Database?

複数のエンティティ バインディングを使用した ElasticSearch インデックス構造の構成

ElasticSearch (ES) をレガシー データベースと統合する場合、効率的なクエリのためにインデックス構造を最適化することが重要です。この場合のタスクは、複雑で最適ではない構造を持つデータベースを ES に複製することです。

問題の概要

データベースは 3 つのテーブルで構成されています。

  • Products: 製品データ (ID、タイトル、価格)
  • Flags: フラグ定義 (売り切り、割引、topproduct) が含まれます
  • FlagsProducts: 製品とフラグをリンクするピボット テーブル

目標は、これを平坦化することです複数の値を維持しながら、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"]
}
ログイン後にコピー

ES マッピング

「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"
                }
            }
        }
    }
}
ログイン後にコピー

Logstash 入力の SQL クエリ

データベースから必要なデータをフェッチするには、次の SQL クエリを推奨します:

以上が従来のデータベースから複数エンティティの関係に合わせて ElasticSearch インデックス構造を最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート