Клиент Elasticsearch Java API возвращает ключ агрегации в виде строки, а не числового значения.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Клиент Elasticsearch Java API возвращает ключ агрегации в виде строки, а не числового значения.

Сообщение Anonymous »

Я использую клиент Elasticsearch Java API для выполнения поискового запроса с агрегатами.
В 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?
  • Есть ли способ настроить клиент так, чтобы он возвращал ключи агрегации в виде числовых типов вместо строковых?
  • Или ручное преобразование — единственный рекомендуемый подход?
    Среда
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»