### Description

Currently, `text_expansion` queries are limited to using rank_features field types.

As we [brought back sparse_vector](https://github.com/elastic/elasticsearch/issues/98104) field type, we want text_expansion queries to be able to work with `sparse_vector` fields as well.

`rank_features` field type should keep being usable in `text_expansion` queries. We don't want to deprecate until the UI and clients that set this up are ready to migrate to `sparse_vector`.
x-pack/plugin/ml/qa/native-multi-node-tests/src/javaRestTest/java/org/elasticsearch/xpack/ml/integration/TextExpansionQueryIT.java
public void testSearchWithMissingModel() throws IOException {
        String modelId = "missing-model";
        String indexName = modelId + "-index";
        var e = expectThrows(ResponseException.class, () -> textExpansionSearch(indexName, "the machine is leaking", modelId, "ml.tokens"));
        assertThat(e.getMessage(), containsString("Could not find trained model [missing-model]"));
    }
    protected Response textExpansionSearch(String index, String modelText, String modelId, String fieldName) throws IOException {
        Request request = new Request("GET", index + "/_search?error_trace=true");
        request.setJsonEntity(Strings.format("""
            {
                "query": {
                  "text_expansion": {
                    "%s": {
                      "model_id": "%s",
                      "model_text": "%s"
                    }
                  }
                }
            }""", fieldName, modelId, modelText));
        return client().performRequest(request);
    }
    protected void createTextExpansionModel(String modelId) throws IOException {
        
        Request request = new Request("PUT", "/_ml/trained_models/" + modelId);
        request.setJsonEntity("""
            {
               "description": "a text expansion model",
               "model_type": "pytorch",
               "inference_config": {
                 "text_expansion": {