/// <summary> /// Get Analytics features for Search /// Consult Algolia Analytics documentation for supported options /// </summary> /// <param name="options"></param> /// <param name="searchType"></param> /// <returns></returns> public async Task <JObject> GetAnalyticsForSearch(AnalyticsOptions options, AnalyticSearchType searchType) { var requestUrl = $"{AnalyticsApiUrl}/searches/{Indices}/{GetSearchResource(searchType)}"; if (!string.IsNullOrWhiteSpace(options.RequestString)) { requestUrl += options.RequestString; } var httpRequest = await _httpClient.GetAsync(requestUrl); var httpResponse = string.Empty; if (httpRequest.IsSuccessStatusCode) { httpResponse = await httpRequest.Content.ReadAsStringAsync(); } else { switch (httpRequest.StatusCode) { case HttpStatusCode.Forbidden: throw new AlgoliaException("Invalid Incredentials."); case HttpStatusCode.InternalServerError: throw new AlgoliaException("An Internal server error occurred."); } } var result = JObject.Parse(httpResponse); return(result); }
/// <summary> /// Gets the parameter for the resource endpoint based on the searchtype selected /// </summary> /// <param name="searchType"></param> /// <returns></returns> private static string GetSearchResource(AnalyticSearchType searchType) { switch (searchType) { case AnalyticSearchType.Popular: return("popular"); case AnalyticSearchType.NoResults: return("noresults"); case AnalyticSearchType.Countries: return("countries"); case AnalyticSearchType.Hits: return("hits"); case AnalyticSearchType.HitsWithTypo: return("hitswithtypo"); case AnalyticSearchType.TopIps: return("ips"); case AnalyticSearchType.Referers: return("referer"); default: throw new AlgoliaException("Invalid Search Feature Selected"); } }
/// <summary> /// Default Method for Geting Analytics for searches /// </summary> /// <param name="searchType"></param> /// <returns></returns> public async Task <JObject> GetAnalyticsForSearch(AnalyticSearchType searchType) { return(await GetAnalyticsForSearch(new AnalyticsOptions(), searchType)); }