В Elasticsearch мое сопоставление полей:
Код: Выделить всё
"departmentId": {
"type": "integer"
}
Ожидаемое поведение
От ответа Elasticsearch (необработанный JSON) я ожидаю:
Код: Выделить всё
"key": 1
Фактическое поведение (Java-клиент)
Использование:
Код: Выделить всё
SearchResponse response = esClient.search(request, JsonData.class);
Код: Выделить всё
SearchResponse response = esClient.search(request, Map.class);
Код: Выделить всё
"key": "1"
Наблюдения
- Проблема возникает только в агрегациях, а не в _source
- Я отладил клиент Java и обнаружил следующее:
Агрегации анализируются с помощью TypedKeysDeserializer - Ключи сегмента десериализуются с помощью JsonpDeserializer.STRING
- Внутренне он вызывает:
Код: Выделить всё
parser.getString() - Принимает VALUE_NUMBER и преобразует его в строку
Вопрос
- Это ожидаемое поведение Java-клиента Elasticsearch API?
- Есть ли способ настроить клиент так, чтобы он возвращал ключи агрегации в виде числовых типов вместо строковых?
- Или ручное преобразование — единственный рекомендуемый подход?
Среда- Версия Elasticsearch:
Код: Выделить всё
7.17.9 - Версия клиента Elasticsearch Java:
Код: Выделить всё
7.17.9 - Версия Java: 17
- Версия Elasticsearch:
Мобильная версия