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
Freigeben: 2024-12-01 13:56:11
Original
320 Leute haben es durchsucht

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"]
}
Nach dem Login kopieren

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"
                }
            }
        }
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage