2016-10-14 104 views
1

我正在嘗試執行聚合以按特定字段值的前兩個字母對文檔進行分組。字段值聚合(正則表達式)

我成功通過特定字段名稱對文檔進行了聚合,但我不知道如何使用這些值。

例如,對於文檔:

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

我想獲得以下響應:

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

是否有聚集的查詢能夠做到這一點?

回答

2

你可以使用一個terms聚集了腳本,而不是一個領域的,就像這樣:

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

請注意,如果您name場都至少有兩個字符,腳本可能僅僅是doc.name.value?.substring(0, 2)。我上面的腳本佔單個字符名稱。

此外請務必登錄enable dynamic scripting才能使其正常工作。