一尘不染

如何在elasticsearch中汇总布尔值?

elasticsearch

我每天要进行几个实验,在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设置为零,然后每天接收平均值。

谁能帮我这个?

非常感谢!


阅读 282

收藏
2020-06-22

共1个答案

一尘不染

第一个0/1表示不完全是ES布尔表示。布尔类型为true /
false。第二统计汇总只能在数字字段上完成,而不能在字符串字段上完成。这就是为什么它适用于0/1表示的原因。

您可以使用扩展统计信息中的脚本来转换此值

{
    "aggs" : {
        ...

        "aggs" : {
            "grades_stats" : {
                "extended_stats" : {
                    "field" : "grade",
                    "script" : "_value == 'T' ? 1 : 0",
                }
            }
        }
    }
}

要查看聚合中脚本编写的一些示例用法,请查看此处

2020-06-22