Maison > développement back-end > tutoriel php > Comment concevoir une structure d'index Elasticsearch pour les relations N:M ?

Comment concevoir une structure d'index Elasticsearch pour les relations N:M ?

Linda Hamilton
Libérer: 2024-10-31 15:14:01
original
400 Les gens l'ont consulté

How to Design Elasticsearch Index Structure for N:M Relationships?

Configuration de la structure d'index Elasticsearch pour plusieurs liaisons d'entités

Introduction

Intégration d'Elasticsearch (ES ) dans des applications existantes peut s'avérer une tâche ardue. Ce dialogue aborde un défi lié à la configuration de la structure d'index ES lors du traitement de liaisons d'entités multiples dans une base de données existante.

Structure de la base de données

La structure de la base de données fournie présente trois tables : Products, Flags et flagsProducts, qui représente une relation N:M entre les produits et les flags. L'objectif est de reproduire cette structure dans ES tout en l'optimisant pour des requêtes efficaces.

Approche recommandée : aplatissement

Plutôt que de maintenir la relation N:M, il est recommandé d'aplatir la structure et créer des documents de produit qui intègrent des informations de drapeau. Cette approche simplifie les requêtes et améliore l'accès aux données.

Structure du document produit

Le document produit aplati contiendrait les champs suivants :

  • id : ID du produit (chaîne, not_analyzed)
  • titre : titre du produit (chaîne)
  • prix : prix du produit (double, valeur nulle : 0,0)
  • flags : tableau de titres de drapeaux (chaîne, not_analyzed)

Exemples de documents de produit :

{
   "id": "00c8234d71c4e94f725cd432ebc04",
   "title": "Alpha",
   "price": 589.0,
   "flags": ["Sellout", "Top Product"]
}
{
   "id": "018357657529fef056cf396626812",
   "title": "Beta",
   "price": 355.0,
   "flags": ["Discount"]
}
Copier après la connexion

Type de mappage de produit

Le correspondant Le type de mappage dans ES serait :

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

Récupération des données de la base de données

Pour récupérer les données nécessaires de la base de données pour l'ingestion dans ES, utilisez 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