'aggregation'에 해당되는 글 7건

  1. 2017.02.09 [Kibana] Unique Count 사용 시 threshold 스크립트 추가.
  2. 2016.06.20 [Elasticsearch] Aggregation name ?
  3. 2015.10.30 [Review] Modeling data for fast aggregations - on Elastic's Blog
  4. 2015.09.16 [Elasticsearch] Part 2.0: The true story behind Elasticsearch storage requirements
  5. 2015.08.20 [Elasticsearch] SearchType.SCAN 사용 시 Aggregation 할 수 있나요?
  6. 2015.01.19 [Kibana] structured aggregation query...
  7. 2014.06.18 [Elasticsearch] aggregations 사용 시 filter 의 차이점.

[Kibana] Unique Count 사용 시 threshold 스크립트 추가.

Elastic/Kibana 2017.02.09 12:54

기억력 극복을 위해 또 기록해 봅니다.


elasticsearch의 cardinality aggregation 을 kibana 에서는 unique count 로 사용 합니다.

여기에 정확도 조절을 위해 precision_threshold 를 설정할 수 있는데요.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html


QueryDSL)

{
    "aggs" : {
        "author_count" : {
            "cardinality" : {
                "field" : "author_hash",
                "precision_threshold": 100 
            }
        }
    }
}



Kibana Script)

{

"precision_threshold":40000

}


위와 같이 사용하시면 됩니다.

주의 하실 부분은 CPU와 Memory 사용에 민감하고 circuit breaker 설정도 확인하셔야 합니다.


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] Aggregation name ?

Elastic/Elasticsearch 2016.06.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 값을 지정하고 있습니다.


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


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Review] Modeling data for fast aggregations - on Elastic's Blog

Elastic/Elasticsearch 2015.10.30 11:43

elastic blog에 올라온 글에 대한 개인 리뷰 입니다.

그냥 정리 차원에서 작성해 보겠습니다.


[원문]

https://www.elastic.co/blog/modeling-data-for-fast-aggregations


글 제목이나 링크만 봐도 어떤 내용인지 감이 오실 겁니다.

"aggregation 성능을 올리기 위한 모델링"

딱 봐도 끌리는 제목이죠.


이 글에서 제시해 주는 건 단순 명료 합니다.

query와 aggregation 조건에 대한 attribute 를 각 문서에 미리 정의를 해 두는 것으로 aggregation operation 수를 줄여 주는 것입니다.

문서에서는 6번의 aggregation operations를 attribute 설정을 통해 2번의 aggregation operations 수행으로 줄어든 것을 확인 시켜 주고 있습니다.


당연히 색인시점에 query, aggregation 조건을 분리해서 문서에 대한 attribute 설정을 하고 색인을 해야 합니다.

즉, 여기서 단점이 바로 보이시죠.

문서에도 나와 있습니다.

조건이 변경 되면 reindexing 을 해야 한다는 것입니다.


잘 아시겠지만 모든 요건을 만족하는 그런 아키텍쳐도, 모델링도 저는 보지 못한 것 같습니다.

항상 그렇지만 연구하고 요건을 충족 시킬수 있는 구성과 모델이 뭔지 실험하고 적용해 보지 않고서는 답을 찾을 수 없지 않을까 생각 합니다.


정리하면,

pre-compute 를 통한 문서의 attribute 정보 추가로 aggregation 수를 줄여 수행 성능을 빠르게 할 수 있다는 것입니다.


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] Part 2.0: The true story behind Elasticsearch storage requirements

Elastic/Elasticsearch 2015.09.16 10:39

원본글)


한 줄 요약)

doc_values 와 index.codec 설정을 사용하면 좋다!!


storage 용량을 압축을 통해서 15 ~ 25% 정도 절약 할 수 있다는 이야기 입니다.

더불어 주의 하셔야 할 점은 decompression 시 penalty 가 있다는 이야기도 있습니다. 

해결 방법(?)도 제시해 주고 있는데요. 

size 파라미터를 이용해서 size=0 으로 해서 사용하시면 됩니다.


압축 옵션의 경우 색인 시에는 성능 저하는 크기 않지만 질의 시에는 성능 저하가 있을 수 있습니다.


저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] SearchType.SCAN 사용 시 Aggregation 할 수 있나요?

Elastic/Elasticsearch 2015.08.20 12:40

제가 분석하고 결과를 정리해 두고도 같은 실수를 하게 되내요.

별 내용은 아닙니다.

단순 정보의 보관 및 찾아보기 용으로 기록해 둡니다.


SearchType.SCAN 사용 시 Aggregation 기능은 사용 할 수 없습니다.


다만, 혼동하는 이유는 QueryDSL 작성 시 작성이 가능 하기 때문에 되는 것 처럼 착각을 하게 되는 것이구요.

실제 작성해서 실행 시켜 보면 아래와 같은 에러를 경험하게 됩니다.


[에러내용]

ElasticsearchIllegalArgumentException[aggregations are not supported with search_type=scan]


혹시라도 잘 못 알고 계시는 분들은 저 처럼 실수 하지 마시기 바랍니다. :)

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Kibana] structured aggregation query...

Elastic/Elasticsearch 2015.01.19 12:53

한줄 정리)

- sub aggregation 과 같은 복잡한 분석 질의는 3.x에서 지원 되지 않으며, 4.x에서 지원 된다.


kibana를 많이 사용하시는 분들은 잘 아실 것 같습니다.

kibana 3.x 까지는 sub aggregation과 같은 좀 복잡한 aggregation 을 사용할 수 없었습니다.

저도 3.x를 가지고 구성을 하려다 보니 막혀 버리더라구요.

그래서 복잡한 aggregation 질의를 사용하고자 한다면 kibana 4.x 로 올려서 사용하시면 될 것 같습니다.

아직은 베타 버전이긴 하지만 조만간 베타 딱지 떼지 않을까 싶내요.


아래는 kibana 3.x에서 제공하고 있는 aggregation 종류 입니다.



여기 보여 지는걸 저도 다 사용은 안해봤구요.

가장 많이 사용하는게 아마도

- column

- histogram

- stats

- terms

정도가 아닐까 합니다. (아닐 수도 있구요. ^^;)


여기서 테스트 하던 것 중 trends panel type은 더 이상 사용되지 않는 것 같습니다.

4.x 에서는 아예 빠졌으니까요.

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] aggregations 사용 시 filter 의 차이점.

Elastic/Elasticsearch 2014.06.18 11:32

알고 있는 내용도 다시 짚고 넣어 갑시다. ^^

우선 aggregation 이 궁금하신 분들은 꼭 필독하시기 바랍니다.

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/aggregations.html


데이터가 많아도 분석을 어떻게 할지 몰라서는 그냥 쓰레기에 불과 하지 않겠죠.


aggregations 사용 시 filter 사용에 대한 주의 사항입니다.

원문에서 그대로 가져왔습니다.


Choosing the appropriate type of filtering — search hits, aggregations or both — often boils down to how you want your user interface to behave. Choose the appropriate filter (or combinations) depending on how you want to display results to your user.

  • filtered query: affects both search results and aggregations
  • filter bucket: affects just aggregations
  • post_filter: affects just search results


지난 번 buzz 에서 발표되었던 내용에 대해서도 살짝 언급 했었죠.

query vs filter 에 대한 차이점에 대해서...

역시 aggregations 에서도 filter 사용은 주의해서 사용을 해야 겠내요.

신고
Trackback 0 : Comment 0