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.
Die Datenbank besteht aus drei Tabellen:
Das Ziel besteht darin, diese Struktur für eine einfachere Abfrage in ES zu verflachen und gleichzeitig die zu bewahren mehrwertige Beziehungen.
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"] }
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" } } } } }
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!