gpt4 book ai didi

elasticsearch - 未知的BaseAggregationBuilder [bucket_sort]-弹性

转载 作者:行者123 更新时间:2023-12-03 01:29:10 30 4
gpt4 key购买 nike

我似乎无法按顺序排列 flex 查询的结果。

我将内存利用率统计信息存储在elasticsearch中。文档示例如下所示:

{
"Component": "ABC",
"memUsage" : "100",
"Timestamp" : "1562072516001"
}

我正在尝试计算给定时间范围内每个组件的平均内存利用率。没有排序的查询工作正常。

不排序的查询结果:
"aggregations": {"averages": {"buckets":    {
"ABC": {
"doc_count": 1,
"memUsageAVG": {"value": 254}
},
"XYZ": {
"doc_count": 1,
"memUsageAVG": {"value": 203}
}
}}}

但是,我努力将这些结果按升序排列(按内存利用率排序或按名称排序)。
{  
"size":0,
"query":{
"bool":{
"must":[
{
"range":{
"Timestamp":{
"gte":"1562072516001",
"lte":"1562072516001"
}
}
}
]
}
},
"aggs":{
"averages":{
"filters":{
"filters":{
"ABC":{
"match":{
"Component":"ABC"
}
},
"XYZ":{
"match":{
"Component":"XYZ"
}
}
}
},
"aggs":{
"memUsageAVG":{
"avg":{
"field":"memUsage"
}
},
"final_sort":{
"bucket_sort":{
"sort":[
{
"memUsageAVG":{
"order":"desc"
}
}
]
}
}
}
}

}
}

执行此查询结果出错:
“type”:“unknown_named_object_exception”,
“reason”:“未知的BaseAggregationBuilder [bucket_sort]”,
“行”:30,
“col”:23

最佳答案

如您的注释中所述,之所以不起作用,是因为在Elasticsearch 6.1.0(release notes)中添加了bucket_sort父聚合,并且您正在运行ES 5.6.16。

您应该能够使用terms聚合并通过子聚合对存储桶进行排序,从而在ES 5.x(和6.x / 7.x)中实现相同的功能:

POST /_search
{
"size": 0,
"aggs": {
"averages": {
"terms": {
"field": "Component",
"size": 10, // Recommend keeping this low-ish to limit memory usage
"include": ["ABC", "XYZ"], // Optionally limit to specific Components
"order": {
"memUsageAVG": "desc"
}
},
"aggs": {
"memUsageAVG": {
"avg": {
"field": "memUsage"
}
}
}
}
}
}

注1:这要求 Component字段是在映射中分析的 keyword。如果没有为该索引明确定义映射,则该字段将默认为分析的 text,并且您会看到类似 Fielddata is disabled on text fields by default的错误。有关更多信息,请参阅 Keyword datatypecreating an index with mappings上的文档。

注2:不需要agg上的 include子句,但是如果您知道要聚合的组件,那么它只能帮助提高性能。

关于elasticsearch - 未知的BaseAggregationBuilder [bucket_sort]-弹性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855164/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com