### Description

Logstash uses the endpoint  `_logstash/pipeline` to retrieve the pipelines configuration from Central Management.
Logstash permit to use the `*` wildcard operator to specify the pipeline names, so a user is not required to list all the pipelines, but just capture the common not changing part of the name. 
Suppose the user has a pipelines with common prefix (for example `pipeline_proxy_1`..`pipeline_proxy_10`), he could also add `pipeline_11` without restarting Logstash and changing the option `xpack.management.pipeline.id`.

Actually the feature is implemented on Logstash side, retrieving all the pipelines and then filtering out the ones that doesn't match; this is a waste. 
This feature request asks to implement the wildcard operator selector on Elasticsearch side.

The rules for wildcard in pipeline names are:
must begin with a letter or underscore and contain only letters, underscores, dashes, and numbers wildcard character `*` is also acceptable and follows globbing rules.

The regexp is defined [here](https://github.com/elastic/logstash/blob/0887d7609df9ba72a5d0cd003c639b16da198622/x-pack/lib/config_management/bootstrap_check.rb#L17-L19).

We could imagine to use the `_logstash/pipeline/<pipeline_id>` where the pipeline_id is a list of comma-separated id (like it's today) but permitting the pipeline_id to use the wildcard operator.

Related:
- Logstash ER https://github.com/elastic/logstash/issues/13868



x-pack/plugin/logstash/src/test/java/org/elasticsearch/xpack/logstash/action/TransportGetPipelineActionTests.java
Level.INFO,
                "Could not retrieve logstash pipelines with ids: [2]"
            )
        );
        mockLogAppender.start();
        final Logger logger = LogManager.getLogger(TransportGetPipelineAction.class);
        
        GetResponse mockResponse = mock(GetResponse.class);
        when(mockResponse.getId()).thenReturn("1");
        when(mockResponse.getSourceAsBytesRef()).thenReturn(mock(BytesReference.class));
        when(mockResponse.isExists()).thenReturn(true);
        MultiGetResponse.Failure failure = mock(MultiGetResponse.Failure.class);
        when(failure.getId()).thenReturn("2");
        MultiGetResponse multiGetResponse = new MultiGetResponse(
            new MultiGetItemResponse[] { new MultiGetItemResponse(mockResponse, null), new MultiGetItemResponse(null, failure) }
        );
        GetPipelineRequest request = new GetPipelineRequest(List.of("1", "2"));
        
        ActionListener<GetPipelineResponse> testActionListener = new ActionListener<>() {
            @Override
            public void onResponse(GetPipelineResponse getPipelineResponse) {
                
                assertThat(getPipelineResponse, is(notNullValue()));
                assertThat(getPipelineResponse.pipelines().size(), equalTo(1));
                
                mockLogAppender.assertAllExpectationsMatched();
            }
            @Override
            public void onFailure(Exception e) {