В OpenSearch термин fielddata используется при сортировке и агрегации (аналогично функциям SQL GROUP BY COUNT и AVERAGE) текстовых полей.
По соображениям производительности существуют определенные правила в отношении типов полей, которые можно агрегировать. Группировать можно по любому числовому полю, кроме текстовых полей, которые должны быть типа keyword или иметь fielddata=true, так как они не поддерживают doc_values (Doc values - это структура данных инвертированного индекса на диске, создаваемая при индексировании документа, которая делает возможным агрегирование).
Fielddata - это структура данных в памяти, используемая текстовыми полями для той же цели. Поскольку она занимает много места в куче, по умолчанию она отключена.
Примеры
Следующий вызов API PUT маппинга включит Fielddata для текстового поля my_field.
1 | PUT my_index/_mapping{"properties":{"my_field":{"type": "text", "fielddata":true}}} |
Примечания
Поскольку по умолчанию полевые данные для текстовых полей отключены, при попытке агрегирования по текстовому полю с отключенными полевыми данными будет выдано следующее сообщение об ошибке:
"По умолчанию полевые данные для текстовых полей отключены. Установите "fielddata=true" на ["имя_вашего_поля"], чтобы загрузить данные поля в память, отменив инвертирование инвертированного индекса". Обратите внимание, что при этом может быть использована "значительная память" - В этом случае можно либо включить field-data для этого текстового поля, либо выбрать другой способ запроса данных (опять же, поскольку field-data потребляет много памяти и не рекомендуется).