The current need to have the field stored in order to be highlighted (term_vector is still needed) can be wasteful, especially when the _source is also stored.
When a specific field requested is not stored in the mapping, it will be automatically extracted from the _source (the source wil be loaded and parsed) and used for highlighting.
Note, this holds for cases where an array type is "in the middle" of the expression. For example: attachments.body where attachments is a an array.