Агрегирование процентилей сортировки со значениями NaN - PullRequest
0 голосов
/ 10 октября 2018

Я использую 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, потому что родительский агрегат comments имеет 0 совпавших документов, и тогда результат с NaN всегда будет последним как в «asc», так и в «desc» порядке.Я пытался добавить "missing": 0 внутри percentiles агрегации, но он все еще возвращает NaN.

Можете ли вы помочь мне отсортировать мои корзины по medianTime, чтобы и когда это "asc" упорядочивало NaNзначения будут первыми, а когда его "desc" они будут последними?

1 Ответ

0 голосов
/ 07 января 2019

NaN не являются числами, поэтому они всегда будут последними.После недолгого разговора о GitHeasticSearch, мы решили, что это подходящий способ для работы с NaN.https://github.com/elastic/elasticsearch/issues/36402

...