Maison >base de données >tutoriel mysql >Comment optimiser la structure d'index ElasticSearch pour les relations multi-entités à partir d'une base de données existante ?

Comment optimiser la structure d'index ElasticSearch pour les relations multi-entités à partir d'une base de données existante ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-01 13:56:11280parcourir

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

Configuration de la structure d'index ElasticSearch avec plusieurs liaisons d'entités

Lors de l'intégration d'ElasticSearch (ES) avec une base de données existante, il est important d'optimiser la structure d'index pour des requêtes efficaces. Dans ce cas, la tâche consiste à répliquer une base de données avec une structure complexe et non optimale dans ES.

Problem Outline

La base de données comprend trois tables :

  • Produits : contient les données du produit (identifiant, titre, price)
  • Flags : contient les définitions des drapeaux (sellout, discount, topproduct)
  • FlagsProducts : un tableau croisé dynamique reliant les produits et les drapeaux

Le but est d'aplatir ce structure pour faciliter les requêtes dans ES, tout en préservant les valeurs multiples relations.

Solution : Aplatir la structure

Pour éliminer la relation n:m entre les produits et les indicateurs, nous vous recommandons de créer des documents de produit plats qui incluent un " flags" tableau contenant tous les indicateurs pertinents pour chaque produit. Cette approche simplifie les requêtes d'indicateurs et fournit une structure de données plus cohérente.

Voici des exemples de documents produits aplatis :

{
   "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 Mapping

Le mappage correspondant pour le type d'index "produits" serait be :

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

Requête SQL pour l'entrée Logstash

Pour récupérer les données requises de la base de données, nous suggérons la requête SQL suivante :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn