### 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
private StringBuilder writeToken(Map.Entry<String, Float> entry, StringBuilder builder) {
        return builder.append("\"").append(entry.getKey()).append("\":").append(entry.getValue());
    }
    private String putPipeline(String modelId) throws IOException {
        String def = Strings.format("""
            {
              "processors": [
                {
                  "inference": {
                    "model_id": "%s",
                    "field_map": {
                      "text_field": "input"
                    },
                    "target_field": "ml",
                    "inference_config": {
                      "text_expansion": {
                        "results_field": "tokens"
                      }
                    }
                  }
                }
              ]
            }""", modelId);
        Request request = new Request("PUT", "_ingest/pipeline/" + modelId + "-pipeline");
        request.setJsonEntity(def);
        assertOkWithErrorMessage(client().performRequest(request));
        return modelId + "-pipeline";
    }
}