2016-07-13 4 views
0

Ich möchte eine einzelne Abfrage machen, die mir sagen wird, welche Felder in meinem Mapping für einen bestimmten Benutzer verwendet werden. Das scheint etwas zu sein, was man mit Aggregation machen könnte, aber ich zeichne ein leeres Bild davon, wie.Aggregation von Feldern in der elastischen Suche verwendet

Also, wenn mein Mapping enthält user, field1, field2 und field3. Ich würde gerne wissen, welche von diesen tatsächlich in den Dokumenten mit einem bestimmten Benutzer erscheinen. Ich habe erwartet, dass etwas wie field1 in 12 Dokumenten, field2 in 20 Dokumenten und field3 in 5 Dokumente für Benutzer x verwendet wird.

+0

Also im Grunde eine 'terms' Aggregation für das Feld' user', dass über eine 'filters' Aggregation für jedes Feld. Das sollte dir 'user/{field1: count, field2: count, field3: count}' –

Antwort

1

Wenn ich auch die Forderung zu verstehen, dies sollte es tun:

{ 
    "size": 0, 
    "query": { 
    "term": { 
     "user": { 
     "value": "x" 
     } 
    } 
    }, 
    "aggs": { 
    "field1_count": { 
     "filter": { 
     "exists": { 
      "field": "field1" 
     } 
     } 
    }, 
    "field2_count": { 
     "filter": { 
     "exists": { 
      "field": "field2" 
     } 
     } 
    }, 
    "field3_count": { 
     "filter": { 
     "exists": { 
      "field": "field3" 
     } 
     } 
    } 
    } 
} 
+0

vielen Dank geben. – aepheus