Wählen Sie nested, wenn mehrere Bedingungen für dasselbe Element eines Arrays gelten müssen. Andernfalls können Werte verschiedener Elemente zusammen versehentlich die Abfrage erfüllen.
Ein Produkt mit zwei Varianten
Es gibt keine rote Variante in Größe L. Gewöhnliches Object-Mapping flacht diese Felder jedoch zu mehreren Farben und mehreren Größen ab, wodurch die Zuordnung zwischen Farbe und Größe verloren geht. Eine Abfrage nach Rot und L kann das Produkt deshalb fälschlich finden.
Mappen Sie variants als nested und color/size als Keyword. Verwenden Sie dann:
{
"query": {
"nested": {
"path": "variants",
"query": {
"bool": {
"filter": [
{"term":{"variants.color":"red"}},
{"term":{"variants.size":"L"}}
]
}
}
}
}
}
Beide Filter laufen jetzt innerhalb eines einzigen verschachtelten Elements, daher passt das Beispielprodukt nicht. Ändern Sie L zu S, und die rote Variante kann passen.
Nested-Elemente erzeugen zusätzliche interne Dokumente und aufwendigere Abfragen. Gewöhnliches Object ist einfacher, wenn Beziehungen innerhalb von Arrays nicht erhalten bleiben müssen. Testen Sie sowohl gültige als auch elementübergreifende Kombinationen, bevor Sie das Mapping für korrekt halten.
Eine Sammlung von IT-Interviewfragen mit ausführlichen Antworten — vom Junior bis zum Senior.
Spenden