### Elasticsearch Version

main

### Installed Plugins

none

### Java Version

_bundled_

### OS Version

21.6.0 Darwin Kernel Version 21.6.0

### Problem Description

_mvt endpoint returns 400 when results are incomplete (shard errors) instead of partial results like _search endpoint

### Steps to Reproduce

Run commands to set up data
```
PUT local1
{}

PUT local1/_mapping
{
  "properties": {
    "value": {
      "type": "keyword"
    },
    "location": {
      "type": "geo_point"
    }
  }
}

PUT local1/_doc/1
{
    "value" : "foo1",
    "location": [0, 0]
}

PUT local2
{}

PUT local2/_mapping
{
  "properties": {
    "value": {
      "type": "keyword"
    },
    "location": {
      "type": "geo_point"
    }
  }
}

PUT local2/_doc/1
{
    "value" : "foo2",
    "location": [1, 1]
}
```

Run _mvt request
```
POST /local*/_mvt/location/1/1/1
{
  "buffer": 0,
  "grid_precision": 0,
  "exact_bounds": true,
  "extent": 4096,
  "query": {
    "bool": {
      "filter": [
        {
          "error_query": {
            "indices": [
              {
                "error_type": "exception",
                "message": "local shard failure message 123",
                "name": "local2"
              }
            ]
          }
        }
      ],
      "must": [],
      "must_not": [],
      "should": []
    }
  }
}
```

Notice how the response returns 400.
```
{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Unsupported vector tile type for field [_shards.failures.0] : java.util.LinkedHashMap"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Unsupported vector tile type for field [_shards.failures.0] : java.util.LinkedHashMap"
  },
  "status": 400
}
```

The same request to _search endpoint returns partial results. _mvt should mimic this behavior.
```
POST /local*/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "error_query": {
            "indices": [
              {
                "error_type": "exception",
                "message": "local shard failure message 123",
                "name": "local2"
              }
            ]
          }
        }
      ],
      "must": [],
      "must_not": [],
      "should": []
    }
  }
}
```

```
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 1,
    "skipped": 0,
    "failed": 1,
    "failures": [
      {
        "shard": 0,
        "index": "local2",
        "node": "XPQtz28bSLW26Oynf6oUmg",
        "reason": {
          "type": "query_shard_exception",
          "reason": "failed to create query: [local2][0] local shard failure message 123",
          "index_uuid": "sg-JHdyNRUqszXjYiQTBNQ",
          "index": "local2",
          "caused_by": {
            "type": "runtime_exception",
            "reason": "[local2][0] local shard failure message 123"
          }
        }
      }
    ]
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0,
    "hits": [
      {
        "_index": "local1",
        "_id": "1",
        "_score": 0,
        "_source": {
          "value": "foo1",
          "location": [
            0,
            0
          ]
        }
      }
    ]
  }
}
```

### Logs (if relevant)

_No response_
x-pack/plugin/vector-tile/src/main/java/org/elasticsearch/xpack/vectortile/rest/VectorTileUtils.java
public static void addPropertyToFeature(VectorTile.Tile.Feature.Builder feature, MvtLayerProps layerProps, String key, Object value) {
        if (value == null) {
            
            return;
        }
        if (value instanceof Byte || value instanceof Short) {
            
            value = ((Number) value).intValue();
        }
        feature.addTags(layerProps.addKey(key));
        int valIndex = layerProps.addValue(value);
        if (valIndex < 0) {
            throw new IllegalArgumentException("Unsupported vector tile type for field [" + key + "] : " + value.getClass().getName());
        }
        feature.addTags(valIndex);
    }
    /**
     * Adds the given properties to the provided layer.
     */
    public static void addPropertiesToLayer(VectorTile.Tile.Layer.Builder layer, MvtLayerProps layerProps) {
        
        layer.addAllKeys(layerProps.getKeys());
        
        final Iterable<Object> values = layerProps.getVals();
        for (Object value : values) {
            layer.addValues(MvtValue.toValue(value));
        }
    }
}