Elasticsearch分析百分比

我正在使用Elasticsearch 1.7.3累积用于分析报告的数据。

我有一个包含文档的索引,其中每个文档都有一个名为“ duration”的数字字段(请求花费了几毫秒)和一个名为“

component”的字符串字段。可能有许多具有相同组件名称的文档。

例如。

{"component": "A", "duration": 10}

{"component": "B", "duration": 27}

{"component": "A", "duration": 5}

{"component": "C", "duration": 2}

我想生成一份报告,说明每个组件:

此组件的所有“持续时间”字段的总和。

A: 15

B: 27

C: 2

此总和在 文档的总期限中所占的百分比。在我的例子中

A: (10+5) / (10+27+5+2) * 100

B: 27 / (10+27+5+2) * 100

C: 2 / (10+27+5+2) * 100

在每个组件中占每个组件的文档百分比。

A: 2 / 4 * 100

B: 1 / 4 * 100

C: 1 / 4 * 100

如何使用Elasticsearch 1.7.3做到这一点?

回答:

使用ES 1.7.3,无法基于两个不同聚合的结果来计算数据,但是,在ES

2.0中,可以使用管道聚合来完成此操作。

但是,您要问的内容并不太复杂,无法在客户端使用1.7.3进行。如果使用下面的查询,您将获得获得期望数字所需要的一切:

POST components/_search

{

"size": 0,

"aggs": {

"total_duration": {

"sum": {

"field": "duration"

}

},

"components": {

"terms": {

"field": "component"

},

"aggs": {

"duration_sum": {

"sum": {

"field": "duration"

}

}

}

}

}

}

结果将如下所示:

{

"took": 1,

"timed_out": false,

"_shards": {

"total": 5,

"successful": 5,

"failed": 0

},

"hits": {

"total": 4,

"max_score": 0,

"hits": []

},

"aggregations": {

"total_duration": {

"value": 44

},

"components": {

"doc_count_error_upper_bound": 0,

"sum_other_doc_count": 0,

"buckets": [

{

"key": "a",

"doc_count": 2,

"duration_sum": {

"value": 15

}

},

{

"key": "b",

"doc_count": 1,

"duration_sum": {

"value": 27

}

},

{

"key": "c",

"doc_count": 1,

"duration_sum": {

"value": 2

}

}

]

}

}

}

现在,您需要做的只是以下内容。我正在使用JavaScript,但是您可以使用任何其他可以读取JSON的语言来执行此操作。

var response = ...the JSON response above...

var total_duration = response.aggregations.total_duration.value;

var total_docs = response.hits.total;

response.aggregations.components.buckets.forEach(function(comp_stats) {

// total duration for the component

var total_duration_comp = comp_stats.duration_sum.value;

// percentage duration of the component

var perc_duration_comp = total_duration_comp / total_duration * 100;

// percentage documents for the component

var perc_doc_comp = comp_stats.doc_count / total_docs * 100;

});

以上是 Elasticsearch分析百分比 的全部内容, 来源链接: utcz.com/qa/431563.html

回到顶部