/// <summary>
        /// Query the specified IOpenSearchable entity with specific parameters and returns result in native format.
        /// </summary>
        /// <param name="entity">Entity.</param>
        /// <param name="parameters">Parameters.</param>
        public IOpenSearchResultCollection Query(IOpenSearchable entity, NameValueCollection parameters)
        {
            // Transform action to invoke
            QuerySettings querySettings;

            // 1) Find the plugin to match with urlTemplates
            querySettings = entity.GetQuerySettings(this);
            if (querySettings == null)
                throw new ImpossibleSearchException(String.Format("No engine extension to query {0}", entity.Identifier));

            // 2) Create the request
            OpenSearchRequest request = entity.Create(querySettings, parameters);

            // 3) Apply the pre-search functions
            ApplyPreSearchFilters(ref request);

            // 4) Perform the Search
            IOpenSearchResponse response = request.GetResponse();
            response.Entity = entity;

            // 5) Apply the pre-search functions
            ApplyPostSearchFilters(request, ref response);

            // 6) Read the response
            var results = querySettings.ReadNative.Invoke(response);
            results.Parameters = request.Parameters;
            results.LastUpdatedTime = DateTime.Now;

            // 7) Apply post search filters
            entity.ApplyResultFilters(request, ref results, results.ContentType);

            // 8 Create the container
            ApplyOpenSearchElements(ref results, request, response);

            return results;
        }
        /// <summary>
        /// Query the specified IOpenSearchable entity with specific parameters and result with the specific result type.
        /// </summary>
        /// <param name="entity">Entity.</param>
        /// <param name="parameters">Parameters.</param>
        /// <param name="resultType">Result type.</param>
        public IOpenSearchResultCollection Query(IOpenSearchable entity, NameValueCollection parameters, Type resultType)
        {
            // Transform action to invoke
            QuerySettings querySettings;

            // 1) Find the best match between urlTemplates and result format
            querySettings = entity.GetQuerySettings(this);
            if (querySettings == null)
                throw new ImpossibleSearchException(String.Format("No engine extension to query {0} in order to return {1}", entity.Identifier, resultType.FullName));

            // 2) Create the request
            OpenSearchRequest request = entity.Create(querySettings, parameters);

            // 3) Apply the pre-search functions
            ApplyPreSearchFilters(ref request);

            // 4) Perform the Search
            IOpenSearchResponse response = request.GetResponse();
            response.Entity = entity;

            // 5) Apply the pre-search functions
            ApplyPostSearchFilters(request, ref response);

            // 6) Transform the response
            IOpenSearchResultCollection results = querySettings.ReadNative.Invoke(response);
            results.Parameters = request.Parameters;
            results.LastUpdatedTime = DateTime.Now;

            IOpenSearchEngineExtension osee = GetFirstExtensionByTypeAbility(resultType);

            // 7) Apply post search filters
            entity.ApplyResultFilters(request, ref results, osee.DiscoveryContentType);

            // 8) Change format
            IOpenSearchResultCollection newResults = osee.CreateOpenSearchResultFromOpenSearchResult(results);

            // 9) Create Result container
            ApplyOpenSearchElements(ref newResults, request, response);

            return newResults;
        }