字段值聚合(正则表达式)

时间:2016-10-14 13:46:08

标签: elasticsearch

我正在尝试执行聚合以按特定字段值的前两个字母对文档进行分组。

我通过特定的字段名称成功地对我的文档进行了攻击,但我不知道如何处理这些值。

例如,对于文档:

[
  {
    "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
  }
]

是否有聚合查询能够做到这一点?

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才能生效。