我正在尝试执行聚合以按特定字段值的前两个字母对文档进行分组。
我通过特定的字段名称成功地对我的文档进行了攻击,但我不知道如何处理这些值。
例如,对于文档:
[
{
"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
}
]
是否有聚合查询能够做到这一点?
答案 0 :(得分: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才能生效。