如何在弹性搜索中聚合布尔值?
How to aggregate boolean values in elastic search?
我每天要进行几个实验,将实验的 error 和 boolean 值(如果结果正常)存储在弹性搜索。
现在,我想在图表中显示结果(使用 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"
}
}
}
}
}
我面临的问题是我无法像从数据库中获取双重错误那样检索布尔值。
当我在
中将字段名称更改为 "ok"
aggs:{
error_stats:{
extended_stats:{
field:"ok"
}
}
}
我收到此错误消息:
ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData
但是,可以聚合所有布尔值,将 true 设为 1,将 false 设为零,然后每天接收一个平均值。
谁能帮我解决这个问题?
非常感谢!
第一个 0/1 表示不完全是 ES 布尔表示。 as true/false 有一个布尔类型。
第二个统计聚合只能在数字字段上完成,而不能在字符串字段上完成。
这就是它适用于 0/1 表示的原因。
您可以使用 scripts in extended stats
转换此值
{
"aggs" : {
...
"aggs" : {
"grades_stats" : {
"extended_stats" : {
"field" : "grade",
"script" : "_value == 'T' ? 1 : 0",
}
}
}
}
}
要查看聚合中脚本的一些示例用法,您可以查看 here。
我每天要进行几个实验,将实验的 error 和 boolean 值(如果结果正常)存储在弹性搜索。 现在,我想在图表中显示结果(使用 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"
}
}
}
}
}
我面临的问题是我无法像从数据库中获取双重错误那样检索布尔值。 当我在
中将字段名称更改为 "ok"aggs:{
error_stats:{
extended_stats:{
field:"ok"
}
}
}
我收到此错误消息:
ClassCastException[org.elasticsearch.index.fielddata.plain.PagedBytesIndexFieldData cannot be cast to org.elasticsearch.index.fielddata.IndexNumericFieldData
但是,可以聚合所有布尔值,将 true 设为 1,将 false 设为零,然后每天接收一个平均值。
谁能帮我解决这个问题?
非常感谢!
第一个 0/1 表示不完全是 ES 布尔表示。 as true/false 有一个布尔类型。 第二个统计聚合只能在数字字段上完成,而不能在字符串字段上完成。 这就是它适用于 0/1 表示的原因。
您可以使用 scripts in extended stats
转换此值{
"aggs" : {
...
"aggs" : {
"grades_stats" : {
"extended_stats" : {
"field" : "grade",
"script" : "_value == 'T' ? 1 : 0",
}
}
}
}
}
要查看聚合中脚本的一些示例用法,您可以查看 here。