Angenommen, in einem ES-Index befinden sich Dokumente mit den zwei Feldern user_id
und action_id
. Wie kann man Benutzer zählen, so dass es Dokumente sowohl unter action_id = 1
als auch unter action_id = 2
gibt?Einen Join in ElasticSearch simulieren
Equivalent SQL wäre
SELECT COUNT(DISTINCT `a`.`uuid`)
FROM `action` AS `a`
JOIN `action` AS `b` ON `a`.`user_id` = `b`.`user_id`
WHERE `a`.`action_id` = 1
AND `b`.`action_id` = 2
ich der einzige Weg gefunden, dies zu tun: Anfrage zweimal alle eindeutigen user_id
s mit diesen action_id
s und finden Durchschnitt von Mengen auf dem ES-Client führt. Dieser Ansatz muss jedoch Megabytes an Daten von ES übertragen, also suche ich nach einer Alternative.
Sie sollten sich wahrscheinlich Eltern-Kind-Beziehung ansehen https://www.elastic.co/guide/en/elasticsearch/guide/current/parent-child.html – slawek
@slawek Dies ist statistische Informationen, so dass es hereinkommt ES Reihe für Reihe. Wie ich aus dem Handbuch verstehe, würde die Hinzufügung eines Kindes erfordern, dass der Elternteil und alle Kinder in ES neu erstellt werden. Das sind möglicherweise mehrere Gigabyte Daten. –
Nicht sicher, wo Sie das haben. Von der Seite, die ich verknüpfte: "Untergeordnete Dokumente können hinzugefügt, geändert oder gelöscht werden, ohne dass das übergeordnete oder andere untergeordnete Elemente betroffen sind. Dies ist besonders nützlich, wenn untergeordnete Dokumente zahlreich sind und häufig hinzugefügt oder geändert werden müssen" – slawek