ich Dokumente, die mehrere Rolle/Rechts-Definitionen als einen Array von verschachtelten Objekten enthalten:Elasticsearch - findet Dokument durch genau ein verschachteltes Objekt passenden
{
...
'roleRights': [
{'roleId':1, 'right':1},
{'roleId':2, 'right':1},
{'roleId':3, 'right':2},
]
}
Ich versuche Dokument mit spezifischen roleRights heraus zu filtern, aber meine Query scheint Kombinationen zu verwechseln. Hier ist meine filterQuery als "Pseudo-Code"
boolFilter > must > termQuery >roleRights.roleId: 1
boolFilter > must > termQuery >roleRights.type: 2
Die oben nur
- Dokumente zurückgeben soll, die 1 haben Rolle mit Recht zugewiesen 2.
Aber es sieht aus wie ich
bekommen- Alle Dokumente, denen die Rolle 1 zugewiesen wurde, ignorieren die richtige
- und alle Dokumente, die Rechte 2 zugewiesen haben, ohne die Rolle zu berücksichtigen.
Irgendwelche Hinweise?
Können Sie Ihr Mapping als auch teilen? Es ist wahrscheinlich, dass 'roleRights' nicht vom' nested' Typ ist und es sollte. – Val
Sie haben Recht. roleRights wird nicht als verschachtelt zugeordnet. Ist das wirklich notwendig? Und müsste ich NestedQueries verwenden? – Philipp
Ja, das ist notwendig. Siehe meine Antwort unten. – Val