Elasticsearch поплавок / точность типа двойного поля - PullRequest
0 голосов
/ 28 февраля 2019

Я экспериментирую с полями типа float / double в Elasticsearch (версия 6.6.0).Я создал этот индекс:

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "amount": {
            "type" : "float"
        }
      }
    }
  }
}

и добавил эту запись:

PUT my_index/_doc/1
{
  "amount" : 1.0000000000111111111122222222223333333333
}

Когда я получаю этот документ, я получаю точную сумму, которую я отправил в Elastic:

GET my_index/_doc/1
...
    "_source": {
        "amount": 1.0000000000111111111122222222223333333333
    }
...

Проверяя документацию, я ожидал, что возвращаемое значение будет иметь меньшую точность (меньше цифр): Упругие числовые типы данных документации

float - A32-разрядное число с плавающей точкой IEEE 754 с одинарной точностью, ограниченное конечными значениями.

Интересно, сохраняет ли Elasticsearch вместо этого значение в виде BigDecimal (или чего-то подобного), но я не смог найти ни одногоссылка на это.

Мой вопрос: это где-то задокументировано?Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 03 марта 2019

После комментария VK я экспериментировал больше и заметил, что:

  • Elasticsearch вернет отправленное ему исходное значение (например, 17.3), даже еслиэто значение не может быть точно представлено в типе, указанном в отображении (например, целое число);
  • значение, преобразованное в тип, указанный в отображении (например, целое число), будет использоваться при выполнении поисковых запросов оценки.Например, запрос всего документа, для которого целочисленное поле> 17.1, НЕ вернет документ, для которого целочисленное поле было установлено на 17.3 (поскольку внутренне Elasticsearch увидит поле == 17).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...