Heim >Datenbank >MySQL-Tutorial >Wie optimiert man die ElasticSearch-Indexstruktur für Multi-Entity-Beziehungen aus einer Legacy-Datenbank?

Wie optimiert man die ElasticSearch-Indexstruktur für Multi-Entity-Beziehungen aus einer Legacy-Datenbank?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-01 13:56:11280Durchsuche

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

Konfigurieren der ElasticSearch-Indexstruktur mit mehreren Entitätsbindungen

Bei der Integration von ElasticSearch (ES) in eine Legacy-Datenbank ist es wichtig, die Indexstruktur für effiziente Abfragen zu optimieren. In diesem Fall besteht die Aufgabe darin, eine Datenbank mit einer komplexen, nicht optimalen Struktur in ES zu replizieren.

Problem Outline

Die Datenbank besteht aus drei Tabellen:

  • Produkte: Enthält Produktdaten (ID, Titel, Preis)
  • Flags: Enthält Flaggendefinitionen (Ausverkauf, Rabatt, Topprodukt)
  • FlagsProdukte: Eine Pivot-Tabelle, die Produkte und Flaggen verknüpft

Das Ziel besteht darin, diese Struktur für eine einfachere Abfrage in ES zu verflachen und gleichzeitig die zu bewahren mehrwertige Beziehungen.

Lösung: Abflachung der Struktur

Um die n:m-Beziehung zwischen Produkten und Flags zu beseitigen, empfehlen wir die Erstellung flacher Produktdokumente, die ein „Flags“-Array enthalten, das alle relevanten Flags für jedes Produkt enthält. Dieser Ansatz vereinfacht Abfragen nach Flags und sorgt für eine kohärentere Datenstruktur.

Hier sind Beispiele für abgeflachte Produktdokumente:

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

Die entsprechende Zuordnung für den Indextyp „Produkte“ wäre sein:

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

SQL-Abfrage für Logstash-Eingabe

Um die erforderlichen Daten aus der Datenbank abzurufen, empfehlen wir die folgende SQL-Abfrage:

Das obige ist der detaillierte Inhalt vonWie optimiert man die ElasticSearch-Indexstruktur für Multi-Entity-Beziehungen aus einer Legacy-Datenbank?. 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