[英]Elasticsearch how to count specific values from multiple fields across all documents in index?
[英]Elasticsearch - Count how many records have specific field values, for multiple fields
我有一个包含如下文档的 elasticsearch 索引:
{"id": 1, "red": true, "green": true, "blue": true }
{"id": 2, "red": false, "green": false, "blue": true }
{"id": 3, "red": false, "green": true }
{"id": 4, "red": true, "green": true, "blue": false }
对于每个颜色属性,我想计算我有多少真实。 新的 colors 随时可能出现。 本质上,我需要某种形式的 output:
red: 2
green: 3
blue: 2
我怎样才能在一个查询中得到它,最好是使用 DSL 或 SQL 查询?
如果我可以将其转化为每天的数据转换/汇总,则可以加分。
您可以使用 Bucket 聚合
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
像这样:
获取 /my-index-000001/_search
{
"aggs": {
"red": {
"terms": {
"field": "red"
}
},
"green": {
"terms": {
"field": "green"
}
},
"blue":{
"terms": {
"field": "green"
}
}
}
}
也可以使用 SQL 来完成,如下所示:
select sum(red::int) as red
, sum(green::int) as green
, sum(blue::int) as blue
from my_index
不完全确定在这种情况下如何处理 NULL(未测试),但它至少适用于非空值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.