2016-10-14 6 views
1

Ich versuche, eine Aggregation durchzuführen, um Dokumente durch die ersten zwei Buchstaben eines bestimmten Feldwerts zu gruppieren.Aggregation auf Felder Werte (Regex)

Ich habe meine Dokumente erfolgreich mit einem bestimmten Feldnamen versehen, aber ich weiß nicht, wie ich mit den Werten arbeiten soll.

Zum Beispiel für die Dokumentation:

[ 
    { 
    "name": "John" 
    }, 
    { 
    "name": "Jog" 
    }, 
    { 
    "name": "James" 
    }, 
    { 
    "name": "Robert" 
    }, 
    { 
    "name": "Jessica" 
    } 
] 

Ich mag würde die folgende Antwort erhalten:

[ 
    { 
    "key": "Jo", 
    "doc_count": 2 
    }, 
    { 
    "key": "Ja", 
    "doc_count": 1 
    }, 
    { 
    "key": "Ro", 
    "doc_count": 1 
    }, 
    { 
    "key": "Je", 
    "doc_count": 1 
    } 
] 

Gibt es eine Aggregation Abfrage der Lage, das zu tun?

Antwort

2

Sie könnten eine terms Aggregation mit einem Skript anstelle eines Feldes wie folgt verwenden:

{ 
    "size": 0, 
    "aggs": { 
    "first_two": { 
     "terms": { 
     "script": "doc.name.value?.size() >=2 ? doc.name.value?.substring(0, 2) : doc.name.value" 
     } 
    } 
    } 
} 

Beachten Sie, dass, wenn Ihr name Felder alle mindestens zwei Zeichen lang sein, einfach das Skript doc.name.value?.substring(0, 2) sein könnte. Mein Skript oben erklärt einzelne Charakternamen.

Achten Sie auch auf enable dynamic scripting, damit dies funktioniert.

Verwandte Themen