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
Libérer: 2024-12-01 13:56:11
original
279 Les gens l'ont consulté

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"]
}
Copier après la connexion

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"
                }
            }
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal