我每天要进行几个实验,在Elasticsearch中存储实验的 错误 和 布尔 值(如果结果正确)。现在,我想在图形中显示结果(使用highchart js)。我使用这样的汇总查询来接收每天的汇总错误,包括标准差:
query: { filtered: { filter: { range : { date: { "gte":"2015-1-1", "lte": "2016-1-1, "time_zone": "+1:00" } } } } }, // Aggregate on the results aggs: { group_by_date: { terms:{ field:"date", order: {_term:"asc"} }, aggs:{ error_stats:{ extended_stats:{ field:"error" } } } } }
我面临的问题是,我无法像从数据库中获得双重错误一样检索布尔值。当我只是将字段名称更改为
aggs:{ error_stats:{ extended_stats:{ field:"ok" } } }
我收到此错误消息:
ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData
但是,可以将所有布尔值合计为true,将true设置为1,将false设置为零,然后每天接收平均值。
谁能帮我这个?
非常感谢!
第一个0/1表示不完全是ES布尔表示。布尔类型为true / false。第二统计汇总只能在数字字段上完成,而不能在字符串字段上完成。这就是为什么它适用于0/1表示的原因。
您可以使用扩展统计信息中的脚本来转换此值
{ "aggs" : { ... "aggs" : { "grades_stats" : { "extended_stats" : { "field" : "grade", "script" : "_value == 'T' ? 1 : 0", } } } } }
要查看聚合中脚本编写的一些示例用法,请查看此处。