sql >> データベース >  >> RDS >> Mysql

複数のエンティティバインディングを使用してElasticSearchインデックス構造を設定する方法

    それは素晴らしいスタートです!

    私は間違いなくそれをすべて平らにします(つまり、 denormalize )そして、以下のような製品ドキュメントを考え出します。そうすれば、flagsを作成するだけで、製品とフラグの間のN:M関係を取り除くことができます。 各製品の配列。したがって、これらのフラグを照会する方が簡単です。

    {
       "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"]
    }
    

    製品マッピングタイプは次のようになります:

    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 jdbcがあるので すでに入力しているので、不足しているのは、製品と関連するフラグをフェッチするための適切なSQLクエリだけです。

      SELECT p.Id as id, p.Title as title, p.Price as price, GROUP_CONCAT(f.Title) as flags
        FROM Products p
        JOIN flagsProducts fp ON fp.ProductId = p.Id
        JOIN Flags f ON fp.FlagId = f.id
    GROUP BY p.Id
    

    次のような行が表示されます:

    +-------------------------------+-------+-------+---------------------+
    | id                            | title | price | flags               |
    +-------------------------------+-------+-------+---------------------+
    | 00c8234d71c4e94f725cd432ebc04 | Alpha |   589 | Sellout,Top product |
    | 018357657529fef056cf396626812 | Beta  |   355 | Discount            |
    | 01a2c32ceeff0fc6b7dd4fc4302ab | Gamma |     0 | Discount            |
    +-------------------------------+-------+-------+---------------------+
    

    Logstashフィルターを使用すると、flagsを分割できます。 配列に入れれば、準備は完了です。




    1. Oracle ForUserSecurityでのプロファイルの作成

    2. SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました

    3. AT TIME ZONE – SQLServer2016の新しいお気に入りの機能

    4. クエリ、ストアドプロシージャ、およびトリガー用のSQLServerパフォーマンスインジケーターの実装