我正在尝试执行汇总,以按特定字段值的前两个字母对文档进行分组。
我成功通过特定的字段名称将文档合并在一起,但是我不知道如何使用这些值。
例如,对于文档:
[
{
"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
}
]
有聚合查询能够做到这一点吗?
最佳答案
您可以将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才能正常工作。
关于elasticsearch - 字段值汇总(正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40044782/