Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entwerfe ich eine Elasticsearch-Indexstruktur für N:M-Beziehungen?

Wie entwerfe ich eine Elasticsearch-Indexstruktur für N:M-Beziehungen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 15:14:01313Durchsuche

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

Einrichten der Elasticsearch-Indexstruktur für mehrere Entitätsbindungen

Einführung

Integration von Elasticsearch (ES ) in bestehende Anwendungen kann eine entmutigende Aufgabe sein. Dieser Dialog befasst sich mit einer Herausforderung beim Einrichten der ES-Indexstruktur beim Umgang mit mehreren Entitätsbindungen in einer Legacy-Datenbank.

Datenbankstruktur

Die bereitgestellte Datenbankstruktur enthält drei Tabellen: Produkte, Flags und flagsProducts, die eine N:M-Beziehung zwischen Produkten und Flags darstellen. Das Ziel besteht darin, diese Struktur in ES zu replizieren und gleichzeitig eine effiziente Abfrage zu optimieren.

Empfohlener Ansatz: Flattening

Anstatt die N:M-Beziehung beizubehalten, wird eine Flatterung empfohlen die Strukturierung und Erstellung von Produktdokumenten, die Flaggeninformationen einbetten. Dieser Ansatz vereinfacht Abfragen und verbessert den Datenzugriff.

Produktdokumentstruktur

Das abgeflachte Produktdokument würde die folgenden Felder enthalten:

  • ID : Produkt-ID (Zeichenfolge, nicht_analysiert)
  • Titel: Produkttitel (Zeichenfolge)
  • Preis: Produktpreis (doppelt, null_Wert: 0,0)
  • Flags: Array von Flag-Titeln (string, not_analyzed)

Beispielproduktdokumente:

{
   "id": "00c8234d71c4e94f725cd432ebc04",
   "title": "Alpha",
   "price": 589.0,
   "flags": ["Sellout", "Top Product"]
}
{
   "id": "018357657529fef056cf396626812",
   "title": "Beta",
   "price": 355.0,
   "flags": ["Discount"]
}

Produktzuordnungstyp

Der entsprechende Der Zuordnungstyp in ES wäre:

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

Daten aus der Datenbank abrufen

Um die erforderlichen Daten aus der Datenbank für die Aufnahme in ES abzurufen, verwenden Sie die folgende SQL-Abfrage :

Das obige ist der detaillierte Inhalt vonWie entwerfe ich eine Elasticsearch-Indexstruktur für N:M-Beziehungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn