<!--
GitHub is reserved for bug reports and feature requests; it is not the place
for general questions. If you have a question or an unconfirmed bug , please
visit the [forums](https://discuss.elastic.co/c/elasticsearch).  Please also
check your OS is [supported](https://www.elastic.co/support/matrix#show_os).
If it is not, the issue is likely to be closed.

For security vulnerabilities please only send reports to security@elastic.co.
See https://www.elastic.co/community/security for more information.

Please fill in the following details to help us reproduce the bug:
-->

**Elasticsearch version** (`bin/elasticsearch --version`): 7.15.2

**Plugins installed**: []

**JVM version** (`java -version`): the one included in ES

**OS version** (`uname -a` if on a Unix-like system): Windows 10

**Description of the problem including expected versus actual behavior**:
When using a nested field as target for Fast Vector Highligter no result is produced. (This works fine with the Unified Highlighter).
The problem seems to be that fvh tries to read the target field literally from the source and as this would not be present in the source 
it assumes that the field is absent. If the nested field has `store: true` set everything works as expected as it then reads the stored field instead of visiting the source-object.

The reason for using a nested field as target is that the root-field is a date-field and we then have multiple nested fields with different versions of the date-string with `with_positions_offsets` enabled for `term_vector`.

**Steps to reproduce**:
make a search like the following with and without `store:true` enabled in the mapping of the the nested target field (`date.text`).

```
{
  "query": {
    "query_string": {
      "query": "2000-10-10",
      "fields": [ "date.text" ],
      "quote_field_suffix": ".exact"
    }
  },
  "highlight": {
    "fields": {
      "date.text": {
        "matched_fields": [ "date.text", "date.text.exact" ],
        "type": "fvh"
      }
    }
  }
}
```



server/src/main/java/org/elasticsearch/search/fetch/subphase/highlight/FastVectorHighlighter.java
private final Boolean termVectorMultiValue;
    public FastVectorHighlighter(Settings settings) {
        this.termVectorMultiValue = SETTING_TV_HIGHLIGHT_MULTI_VALUE.get(settings);
    }
    @Override
    public HighlightField highlight(FieldHighlightContext fieldContext) throws IOException {
        SearchHighlightContext.Field field = fieldContext.field;
        FetchSubPhase.HitContext hitContext = fieldContext.hitContext;
        MappedFieldType fieldType = fieldContext.fieldType;
        boolean forceSource = fieldContext.forceSource;
        boolean fixBrokenAnalysis = fieldContext.context.containsBrokenAnalysis(fieldContext.fieldName);
        if (canHighlight(fieldType) == false) {
            throw new IllegalArgumentException(
                "the field ["
                    + fieldContext.fieldName
                    + "] should be indexed with term vector with position offsets to be used with fast vector highlighter"
            );
        }
        Encoder encoder = field.fieldOptions().encoder().equals("html") ? HighlightUtils.Encoders.HTML : HighlightUtils.Encoders.DEFAULT;
        if (fieldContext.cache.containsKey(CACHE_KEY) == false) {
            fieldContext.cache.put(CACHE_KEY, new HighlighterEntry());
        }
        HighlighterEntry cache = (HighlighterEntry) fieldContext.cache.get(CACHE_KEY);
        FieldHighlightEntry entry = cache.fields.get(fieldType);
        if (entry == null) {
            FragListBuilder fragListBuilder;
            if (field.fieldOptions().numberOfFragments() == 0) {
                fragListBuilder = new SingleFragListBuilder();
            } else {
                fragListBuilder = field.fieldOptions().fragmentOffset() == -1