当前位置: 首页 > 知识库问答 >
问题:

使用NaN值排序百分位数聚合

宦炜
2023-03-14

我使用的是ElasticSearch 2.3.3,我有以下聚合:

"aggregations": {
        "mainBreakdown": {
            "terms": {
                "field": "location_i",
                "size": 10,
                "order": [
                    {
                        "comments>medianTime.50": "asc"
                    }
                ]
            },
            "aggregations": {
                "comments": {
                    "filter": {
                        "term": {
                            "type_i": 120
                        }
                    },
                    "aggregations": {
                        "medianTime": {
                            "percentiles": {
                                "field": "time_l",
                                "percents": [
                                    50.0
                                ]
                            }
                        }
                    }
                }
            }
        }
    }

为了更好地理解,我在字段名中添加了后缀,它告诉字段映射:

  • _i=整数
  • _l=long(时间戳)

聚合响应是:

"aggregations": {
    "mainBreakdown": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 100,
          "doc_count": 2,
          "comments": {
            "doc_count": 1,
            "medianTime": {
              "values": {
                "50.0": 20113
              }
            }
          }
        },
        {
          "key": 121,
          "doc_count": 14,
          "comments": {
            "doc_count": 0,
            "medianTime": {
              "values": {
                "50.0": "NaN"
              }
            }
          }
        }
      ]
    }
}

我的问题是medianTime聚合,有时具有NaN的值,因为父聚合注释有0个匹配的文档,然后NaN的结果将始终在“asc”和“desc”顺序上垫底。
我尝试在百分位数聚合中添加“缺失”: 0,但它仍然返回一个NaN

你能帮我按中位数时间对我的桶进行排序吗,当它“asc”排序NaN值将排在第一位,当它的“desc”时,它们将是最后一个?

共有1个答案

屈翰飞
2023-03-14

NaN不是数字,所以它们将永远是最后一个。
在对弹性搜索github进行了简短的讨论之后,我们决定这是处理NaN的适当方法。
https://github.com/elastic/elasticsearch/issues/36402

 类似资料:
  • 在elasticsearch中,我可以在第二个聚合的数字字段上聚合和排序聚合。 例如。 但是,我想根据分类字段值对聚合进行排序。也就是说,字段2的值是(“a”、“b”、“c”)中的一个值——我想首先按所有文档对a1进行排序,字段2为:“a”,然后字段2为“b”,最后字段2为“c”。 在我的例子中,每个字段1都有一个唯一的字段2。所以我真的只想找到一种方法,按字段2对a1结果进行排序。

  • 我试图编写< code>udaf来计算< code>percentile值。 我需要编写自定义函数,因为现有的火花函数,和使用舍入不同于我的需要。 我需要使用地板而不是中点舍入。我可以用<code>pyspark<code>编写它吗? 如果不是,如何在scala中实现这一点? 我需要使用以下方法计算:

  • 问题内容: 有没有办法使用numpy.percentile函数来计算加权百分位数?还是有人知道替代的python函数来计算加权百分位数? 谢谢! 问题答案: 不幸的是,numpy并没有为所有功能内置加权函数,但是,您始终可以将某些东西放在一起。

  • 问题内容: 我想将数据汇总到另一个字段中,也想根据名称以排序方式获取汇总数据。 我的数据是: 我的查询: 我的映射是: 我正在根据分组记录的相关性平均值来获取数据。现在,我想要的是第一个基于groupid的记录,然后在每个存储桶中根据名称字段对数据进行排序。 我想对一个字段进行分组,然后在对分区进行分组之后,对另一个字段进行排序。这是样本数据。 还有其他字段,例如created_on,update

  • 给java类一些东西 我有一张物品清单 我希望能够对它们进行排序,这样它们就可以按照每个父对象的虚数的累积和排序,然后再按照虚数排序。 所以我最终 我知道用parentKey和sum of noThings映射它是 我想,也许包装我的Something类并获得每个父项的总密钥可能会在某种程度上起作用。 但看起来工作量很大,不太优雅。 如有任何意见/想法,将不胜感激。

  • 我正在尝试使用Elasticsearch(2.4)聚合对使用该查询的多个索引按“productId”分组 1) 我想按分数排序,所以我尝试使用 哪个返回 2) 此外,我正在尝试使用分页,“size”键实际起作用,但“from”键不起作用 **更新-聚合结果示例** 希望有人能帮忙