### Elasticsearch Version

main

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

21.6.0 Darwin Kernel Version 21.6.0: Thu Jul  6 22:18:26 PDT 2023; root:xnu-8020.240.18.702.13~1/RELEASE_X86_64 x86_64

### Problem Description

fields option is not returning values with an array of objects. See example in "Steps to Reproduce". Problem brought up in Kibana SDH https://github.com/elastic/sdh-kibana/issues/4114

### Steps to Reproduce

```
PUT test
{}

PUT test/_mapping
{
  "properties": {
    "results": {
      "properties": {
        "value": {
          "type": "geo_point"
        }
      }
    }
  }
}

PUT test/_doc/1
{
  "results": [
    {
      "value": [
        {
          "lat": 0,
          "lon": 0
        }
      ]
    }
  ]
}


POST /test*/_search
{
  "_source": false,
  "fields": [
    "results.value"
  ]
}
```

In the response, notice how fields is not populated and no value is returned

```
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_id": "1",
        "_score": 1
      }
    ]
  }
}
```

I would expect to get a response like 
```
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "test",
        "_id": "1",
        "_score": 1,
        "fields": {
          "results.value": [
            {
              "coordinates": [
                0,
                0
              ],
              "type": "Point"
            }
          ]
        }
      }
    ]
  }
}
```

### Logs (if relevant)

_No response_
server/src/test/java/org/elasticsearch/search/fetch/subphase/FieldFetcherTests.java
String routing = randomAlphaOfLength(12);
        long version = randomLongBetween(1, 100);
        withLuceneIndex(mapperService, iw -> {
            ParsedDocument parsedDocument = mapperService.documentMapper()
                .parse(source(docId, b -> b.field("integer_field", "value"), routing));
            parsedDocument.version().setLongValue(version);
            iw.addDocument(parsedDocument.rootDoc());
        }, iw -> {
            List<FieldAndFormat> fieldList = List.of(
                new FieldAndFormat("_id", null),
                new FieldAndFormat("_index", null),
                new FieldAndFormat("_version", null),
                new FieldAndFormat("_routing", null),
                new FieldAndFormat("_ignored", null)
            );
            FieldFetcher fieldFetcher = FieldFetcher.create(
                newSearchExecutionContext(
                    mapperService,
                    (ft, fdc) -> fieldDataLookup(fdc.sourcePathsLookup()).apply(ft, fdc.lookupSupplier(), fdc.fielddataOperation())
                ),
                fieldList
            );
            IndexSearcher searcher = newSearcher(iw);
            LeafReaderContext readerContext = searcher.getIndexReader().leaves().get(0);
            fieldFetcher.setNextReader(readerContext);
            Source s = SourceProvider.fromStoredFields().getSource(readerContext, 0);
            Map<String, DocumentField> fetchedFields = fieldFetcher.fetch(s, 0);
            assertThat(fetchedFields.size(), equalTo(5));
            assertEquals(docId, fetchedFields.get("_id").getValue());
            assertEquals(routing, fetchedFields.get("_routing").getValue());