Elasticsearch - округление чисел по функциям min и max - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть данные в этом формате.

Первые данные:

"properties" : [
  {
    "char_id" : 347,
    "char_value_string" : "107",
    "char_value_int" : 107
  },
  {
    "char_id" : 906,
    "char_value_string" : "8.5",
    "char_value_int" : 8.5
  },
  {
    "char_id" : 908,
    "char_value_string" : "Question_V1",
    "char_value_int" : null
  }

}

Вторые данные:

"properties" : [
  {
    "char_id" : 347,
    "char_value_string" : "110",
    "char_value_int" : 110
  },
  {
    "char_id" : 906,
    "char_value_string" : "18",
    "char_value_int" : 18
  },
  {
    "char_id" : 908,
    "char_value_string" : "Question_V2",
    "char_value_int" : null
  }
}

Третьи данные:

"properties" : [
  {
    "char_id" : 347,
    "char_value_string" : "220",
    "char_value_int" : 220
  },
  {
    "char_id" : 906,
    "char_value_string" : "54",
    "char_value_int" : 54
  },
  {
    "char_id" : 908,
    "char_value_string" : "Question_V3",
    "char_value_int" : null
  }
}

Я использую агрегацию, чтобы найти минимальное и максимальное значение char_value_int для каждого char_id.Эта агрегация работает, но если char_value_int - это число с плавающей запятой, то это максимальное или минимальное значение округляется до целого числа (например, 8.5 округляется до 8).Мне нужно получить ровно 8.5, а не 8.

{
  "size": 0,
  "aggs": {
    "char_ids": {
      "terms": {
        "field": "properties.char_id"
      },
      "aggs": {
        "min_char_values_int": {
          "min": {
            "field": "properties.char_value_int"
          }
        },
        "max_char_values_int": {
          "max": {
            "field": "properties.char_value_int"
          }
        }
      }
    }
  }
}

1 Ответ

3 голосов
/ 24 сентября 2019

Ваше значение хранится в виде длинного целого, поэтому десятичная часть исчезает во время индексации ... даже если в исходном документе указано 8.5.

Вместо этого вам нужно изменить отображение на float и переиндексировать данные.

Затем вы получите ожидаемые минимальные / максимальные значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...