Elasticsearch/Kibana 中两个聚合列的计算列?
Computed column out of two aggregated columns in Elasticsearch/Kibana?
假设我有一个简单的聚合,如下所示:
| Item | Views | Clicks |
+------+-------+--------+
| B | 123 | 34 |
| A | 234 | 12 |
| C | 56 | 2 |
是否可以生成一个额外的列作为 Views 和 Clicks 列的计算结果?例如:
| Item | Views | Clicks | Ratio |
+------+-------+--------+-------+
| B | 123 | 34 | 0.28 |
| A | 234 | 12 | 0.05 |
| C | 56 | 2 | 0.03 |
能够在此附加列上进行排序也是理想的选择。
有没有办法通过Elasticsearch(和Kibana)实现这种聚合?
您可以使用带有脚本支持的管道聚合。缺点是您必须启用内联脚本或将脚本放在文件中。要启用对内联脚本的支持,请将其添加到您的 yaml 中。
script.inline: on
下面举例:
POST /items/item/_bulk
{ "index": { "_id": "1" }}
{"name": "A","views": 2,"clicks": 3}
{ "index": { "_id": "2" }}
{"name": "A","views": 1,"clicks": 9}
{ "index": { "_id": "3" }}
{"name": "B","views": 5,"clicks": 15}
{ "index": { "_id": "4" }}
{"name": "C","views": 1,"clicks": 1}
{ "index": { "_id": "5" }}
{"name": "A","views": 3,"clicks": 23}
GET /items/item/_search
{
"size": 0,
"aggs": {
"byName": {
"terms": {
"field": "name",
"size": 10
},
"aggs": {
"countClicks": {
"sum": {
"field": "clicks"
}
},
"countViews": {
"sum": {
"field": "views"
}
},
"computeRatio": {
"bucket_script": {
"buckets_path": {
"the_clicks": "countClicks",
"the_views": "countViews"
},
"script": "the_clicks / the_views"
}
}
}
}
}
}
您可以直接在 Kibana 中创建脚本化字段,这将为您提供所需的结果。
要在 Kibana 中创建脚本字段,请按照以下步骤操作:
在 Kibana 中,单击“设置”选项卡,然后单击您的索引模式
您应该看到 2 个选项卡“字段”和“脚本字段”。
单击“脚本字段”选项卡。然后“添加脚本字段”。
在脚本字段中输入“名称”作为比率,然后输入以下内容:-
doc['clicks'].value / doc['views'].value
点击底部的“创建字段”。现在您的脚本字段将被添加并可以从“发现”页面查看。
假设我有一个简单的聚合,如下所示:
| Item | Views | Clicks |
+------+-------+--------+
| B | 123 | 34 |
| A | 234 | 12 |
| C | 56 | 2 |
是否可以生成一个额外的列作为 Views 和 Clicks 列的计算结果?例如:
| Item | Views | Clicks | Ratio |
+------+-------+--------+-------+
| B | 123 | 34 | 0.28 |
| A | 234 | 12 | 0.05 |
| C | 56 | 2 | 0.03 |
能够在此附加列上进行排序也是理想的选择。
有没有办法通过Elasticsearch(和Kibana)实现这种聚合?
您可以使用带有脚本支持的管道聚合。缺点是您必须启用内联脚本或将脚本放在文件中。要启用对内联脚本的支持,请将其添加到您的 yaml 中。
script.inline: on
下面举例:
POST /items/item/_bulk
{ "index": { "_id": "1" }}
{"name": "A","views": 2,"clicks": 3}
{ "index": { "_id": "2" }}
{"name": "A","views": 1,"clicks": 9}
{ "index": { "_id": "3" }}
{"name": "B","views": 5,"clicks": 15}
{ "index": { "_id": "4" }}
{"name": "C","views": 1,"clicks": 1}
{ "index": { "_id": "5" }}
{"name": "A","views": 3,"clicks": 23}
GET /items/item/_search
{
"size": 0,
"aggs": {
"byName": {
"terms": {
"field": "name",
"size": 10
},
"aggs": {
"countClicks": {
"sum": {
"field": "clicks"
}
},
"countViews": {
"sum": {
"field": "views"
}
},
"computeRatio": {
"bucket_script": {
"buckets_path": {
"the_clicks": "countClicks",
"the_views": "countViews"
},
"script": "the_clicks / the_views"
}
}
}
}
}
}
您可以直接在 Kibana 中创建脚本化字段,这将为您提供所需的结果。
要在 Kibana 中创建脚本字段,请按照以下步骤操作:
在 Kibana 中,单击“设置”选项卡,然后单击您的索引模式
您应该看到 2 个选项卡“字段”和“脚本字段”。
单击“脚本字段”选项卡。然后“添加脚本字段”。
在脚本字段中输入“名称”作为比率,然后输入以下内容:-
doc['clicks'].value / doc['views'].value
点击底部的“创建字段”。现在您的脚本字段将被添加并可以从“发现”页面查看。