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
Linda Hamiltonoriginal
2024-10-31 15:14:01383parcourir

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

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

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!

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