【发布时间】:2014-06-03 03:10:21
【问题描述】:
我有一个 elasticsearch 查询,它查询索引,然后根据特定字段 sender_not_analyzed 进行聚合。然后,我在同一字段sender_not_analyzed 上使用术语聚合,它返回顶部“发件人”的存储桶。我的查询目前是:
{
"size": 0,
"query": {
"regexp": {
"sender_not_analyzed": ".*[@].*"
}
},
"aggs": {
"sender-stats": {
"terms": {
"field": "sender_not_analyzed"
}
}
}
}
它返回看起来像这样的桶:
"aggregations": {
"sender-stats": {
"buckets": [
{
"key": "<Mike <mike@fizzbuzz.com>@MISSING_DOMAIN>",
"doc_count": 5017
},
{
"key": "jon.doe@foo.com",
"doc_count": 3963
},
{
"key": "jane.doe@foo.com",
"doc_count": 2857
},
{
"key": "jon.doe@bar.com",
"doc_count":1544
}
我如何编写一个聚合,以便为每个唯一的电子邮件域获得单个存储桶,例如 foo.com 将有一个 (3963 + 2857) 6820 的 doc_count?我可以使用正则表达式聚合来完成此操作,还是需要编写某种自定义分析器来将 @ 处的字符串拆分到字符串的末尾?
【问题讨论】: