Elasticsearch 집합의 Range 구간 집합

14296 단어

Elasticsearch는 다양한 집합 방식을 제공하여 사용자가 정보 통계와 분류를 신속하게 하는 데 도움을 줄 수 있다. 본고는 주로 Range 구간 집합을 어떻게 사용하는지 설명한다.
가장 간단한 예는 한 학급 시험 60점 이하, 60~80점, 80~100점을 통계하려면 ES에서 명령 하나만 있으면 쉽게 통계할 수 있는데...
추가 자료 참조: Elasticsearch 문서 번역

집합 예


앞의 예에 따라 다음 명령을 수행할 수 있습니다.
{
    "aggs":{
        "grade_ranges":{
            "range":{
                "field":"grade",
                "ranges":[
                    {"to":60},
                    {"from":60,"to":80},
                    {"from":80}]
                }
            }
        }
}

다음과 같은 결과를 얻을 수 있습니다.
{
    ...
    "aggregations":{
        "price_ranges":{
            "buckets":[
                {
                    "to":60,
                    "doc_count":2
                },
                {
                    "from":60,
                    "to":80,
                    "doc_count":32
                },
                {
                    "from":80,
                    "doc_count":14
                }
            ]
        }
    }
}

복잡한 예, 각 구간의 이름을 지정합니다


keyed:true를 설정하여 각 구간을 특정 이름으로 되돌릴 수 있습니다.
{
    "aggs":{
        "price_ranges":{
            "range":{
                "field":"price",
                "keyed":true,
                "ranges":[
                    {"to":50},
                    {"from":50,"to":100},
                    {"from":100}
                ]
            }
        }
    }
}

기본적으로 구간별로 이름이 지정됩니다.
{
    ...
    "aggregations":{
        "price_ranges":{
            "buckets":{
                "*-50.0":{
                    "to":50,
                    "doc_count":2
                },
                "50.0-100.0":{
                    "from":50,
                    "to":100,
                    "doc_count":4
                },
                "100.0-*":{
                    "from":100,
                    "doc_count":4
                }
            }
        }
    }
}

물론 구간의 이름도 지정할 수 있습니다.
{
    "aggs":{
        "price_ranges":{
            "range":{
                "field":"price",
                "keyed":true,
                "ranges":[
                    {"key":"cheap","to":50},
                    {"key":"average","from":50,"to":100},
                    {"key":"expensive","from":100}
                ]
            }
        }
    }
}

스크립트 사용


다른 집합과 유사하게 Range 집합은 스크립트 사용을 지원합니다.
{
    "aggs":{
        "price_ranges":{
            "range":{
                "script":"doc['price'].value",
                "ranges":[
                    {"to":50},
                    {"from":50,"to":100},
                    {"from":100}
                ]
            }
        }
    }
}

파일 스크립트나 스크립트 값의 조작은 모두 다른 것과 차이가 많지 않기 때문에 더 이상 군더더기 없이 설명할 필요가 없다.

중합 중첩


보통 구간 집합에서는 플러그인 집합을 한다. 예를 들어 우리는 각 구간에서 통계stats 집합을 한다.
{
    "aggs":{
        "price_ranges":{
            "range":{
                "field":"price",
                "ranges":[
                    {"to":50},
                    {"from":50,"to":100},
                    {"from":100}
                ]},
                "aggs":{
                    "price_stats":{
                        "stats":{
                            "field":"price"
                        }
                    }
                }
            }
        }
    }

결과는 다음과 같습니다.
{
    "aggregations":{
        "price_ranges":{
            "buckets":[
                {
                    "to":50,
                    "doc_count":2,
                    "price_stats":{
                        "count":2,
                        "min":20,
                        "max":47,
                        "avg":33.5,
                        "sum":67
                    }
                },
                {
                    "from":50,
                    "to":100,
                    "doc_count":4,
                    "price_stats":{
                        "count":4,
                        "min":60,
                        "max":98,
                        "avg":82.5,
                        "sum":330
                    }
                },
                {
                    "from":100,
                    "doc_count":4,
                    "price_stats":{
                        "count":4,
                        "min":134,
                        "max":367,
                        "avg":216,
                        "sum":864
                    }
                }
            ]
        }
    }
}

집합 필드를 지정하지 않으면 기본적으로 Range 집합 필드를 기준으로 집계됩니다.
{
    "aggs":{
        "price_ranges":{
            "range":{
                "field":"price",
                "ranges":[
                    {"to":50},
                    {"from":50,"to":100},
                    {"from":100}
                ]
            },
            "aggs":{
                "price_stats":{
                    "stats":{}
                }
            }
        }
    }
}

좋은 웹페이지 즐겨찾기