[Elasticsearch] Aggregation name ?

Elastic/Elasticsearch 2016. 6. 20. 18:09

aggregation 을 많이 사용하시는 분들은 잘 아실것 같구요.

그냥 기본만 사용하시는 분들에게는 생소할 수 있어서 그냥 정리해 봤습니다.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/search-aggregations.html#_structuring_aggregations


"aggregations" : { "<aggregation_name>" : { "<aggregation_type>" : { <aggregation_body> } [,"meta" : { [<meta_data_body>] } ]? [,"aggregations" : { [<sub_aggregation>]+ } ]? } [,"<aggregation_name_2>" : { ... } ]* 

}


여기서 "<aggregation_name>" 에 대한 내용입니다.

이 값은 기본적으로 aggs 수행 후 return 될 때 사용되는 변수명을 지정하게 됩니다.

간혹 aggregation_name 에 field 명을 주시는 경우가 있을 수 있는데요. 안되는 것은 아니지만 해당 변수에 대한 정확한 용도를 알고 사용하시면 더 좋겠다 싶어서 글 남겨 봤습니다.


/**

 * Constructs a new aggregation builder.

 *

 * @param name  The aggregation name

 * @param type  The aggregation type

 */

public AggregationBuilder(String name, Type type) {

    if (name == null) {

        throw new IllegalArgumentException("[name] must not be null: [" + name + "]");

    }

    if (type == null) {

        throw new IllegalArgumentException("[type] must not be null: [" + name + "]");

    }

    this.name = name;

    this.type = type;

}


...중략...


@Override

public final XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {

    builder.startObject(name);


    if (this.metaData != null) {

        builder.field("meta", this.metaData);

    }

    builder.field(type.name());

    internalXContent(builder, params);


    if (factoriesBuilder != null && (factoriesBuilder.count()) > 0) {

        builder.field("aggregations");

        factoriesBuilder.toXContent(builder, params);


    }


    return builder.endObject();

}


소스 코드를 보셔도 아시겠죠?

XContentBuilder 에서 최상위 object name 에 aggregation_name 값을 지정하고 있습니다.


그냥 제가 기억하기 위해 글 남기고 마무리 하겠습니다.


: