ElasticSearch 사용 요약(7)

14134 단어 ElasticSearch
Elasticsearch는 다양한 집합 방식을 제공하여 사용자가 정보 통계와 분류를 신속하게 하는 데 도움을 줄 수 있다. 본고는 주로 Range 구간 집합을 어떻게 사용하는지 설명한다.
가장 간단한 예는 한 학급 시험 60점 이하, 60~80점, 80~100점을 통계하려면 ES에서 명령 하나만 있으면 쉽게 통계할 수 있는데...집합 예
{
    "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를 설정하여 각 구간이 특정한 이름으로 되돌아갈 수 있습니다
{
    ...
    "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":{} }
            }
        }
    }
}

좋은 웹페이지 즐겨찾기