public BatchSearchResponse BatchSearch([FromBody] BatchSearchRequest request) { return(new BatchSearchResponse { ReferenceId = request.ReferenceId, SearchResults = _searchIndexBusiness.Search(request), Success = true }); }
public BatchSearchResult GetSongInfos(BatchSearchRequest searchRequest) { var result = new BatchSearchResult { ResultCode = ResultCode.Successful }; if (searchRequest.SearchRequestItems.Count > Common.Constants.MaxRequestForOneBatch) { result.ResultCode = ResultCode.Failed; result.ExtraMessage = $"Too many request items, maxinum {Common.Constants.MaxRequestForOneBatch}."; } else if (searchRequest.SearchRequestItems?.Any() ?? false) { foreach (var item in searchRequest.SearchRequestItems) { var batchItem = new BatchSearchResultItem { ResultCode = ResultCode.Successful, SearchRequestItem = item }; try { logger.LogDebug("{Method} start for {item}", nameof(GetSongInfos), item); var searchStr = GetSearchQueryStr(item); if (!string.IsNullOrWhiteSpace(searchStr)) { var query = Parser.Parse(searchStr); var songs = LucenePool.SearchSongs(musicConfiguration.IndexPath, query, 10); batchItem.SongInfos = songs; logger.LogDebug("{Method} ended for {item}, find {count} results.", nameof(GetSongInfos), item, songs.Length); } else { batchItem.ResultCode = ResultCode.Failed; batchItem.ExtraMessage = "No valid info to generate search query"; logger.LogWarning("{Method} ended for no valid search information", nameof(GetSongInfos)); } } catch (Exception ex) { batchItem.ResultCode = ResultCode.Exception; batchItem.ExtraMessage = "Error occur"; logger.LogError(ex, "GetSongInfo Error Occur"); } result.SearchResults.Add(batchItem); } } return(result); }
public IEnumerable <BatchSearchResult> Search(BatchSearchRequest batchSearchRequest) { foreach (var search in batchSearchRequest.Searches) { var results = Search( batchSearchRequest.SearchQueryName, search.SearchFields, batchSearchRequest.SearchConfigurationParameters, batchSearchRequest.TopResults, batchSearchRequest.Explain, batchSearchRequest.IndexName); yield return(new BatchSearchResult { ReferenceId = search.ReferenceId, SearchResults = results.ToList() }); } }
public void BatchSearch_ReturnsMultipleMatches() { // Arrange var searchService = CreateIndexService(); var request = new BatchSearchRequest { ReferenceId = "batch", TopResults = 10, SearchQueryName = "WiseIdPersonSearch", SearchConfigurationParameters = new[] { new SearchQueryParameterToken { Name = "WiseIdExactMatchWeight", Value = "3" }, new SearchQueryParameterToken { Name = "WiseIdPartialMatchWeight", Value = ".8" }, new SearchQueryParameterToken { Name = "WiseIdTolerance", Value = ".8" }, new SearchQueryParameterToken { Name = "LocalRowKeyExactMatchWeight", Value = "3" }, new SearchQueryParameterToken { Name = "MinimumFieldMatches", Value = "2" }, new SearchQueryParameterToken { Name = "FirstNameWithSynonymsMatchWeight", Value = "1" }, new SearchQueryParameterToken { Name = "FirstNameTolerance", Value = ".75" }, new SearchQueryParameterToken { Name = "FirstNamePhoneticWeight", Value = ".9" }, new SearchQueryParameterToken { Name = "MiddleNameWithSynonymsMatchWeight", Value = ".5" }, new SearchQueryParameterToken { Name = "MiddleNameTolerance", Value = ".75" }, new SearchQueryParameterToken { Name = "MiddleNamePhoneticWeight", Value = ".4" }, new SearchQueryParameterToken { Name = "LastNameWithSynonymsMatchWeight", Value = "1" }, new SearchQueryParameterToken { Name = "LastNameTolerance", Value = ".75" }, new SearchQueryParameterToken { Name = "BirthDateExactMatchWeight", Value = ".9" }, new SearchQueryParameterToken { Name = "BirthDatePartialMatchWeight", Value = ".75" }, new SearchQueryParameterToken { Name = "BirthDateTolerance", Value = ".7" }, new SearchQueryParameterToken { Name = "GenderExactMatchWeight", Value = ".3" }, new SearchQueryParameterToken { Name = "SuffixExactMatchWeight", Value = ".1" }, }, Searches = new List <Domain.Search.Search> { new Domain.Search.Search { ReferenceId = "1", SearchFields = new[] { new SearchField { FieldName = "FirstName", Value = "Fred" }, new SearchField { FieldName = "LastName", Value = "Flintstone" }, } }, new Domain.Search.Search { ReferenceId = "2", SearchFields = new[] { new SearchField { FieldName = "FirstName", Value = "Jeff" }, new SearchField { FieldName = "LastName", Value = "Jacka" }, } }, }, }; // Act var actual = searchService.Search(request); // Assert actual.Should().NotBeNull(); actual.ReferenceId.Should().Be("batch"); actual.Success.Should().BeTrue(); actual.SearchResults.Count().Should().Be(2); actual.SearchResults.First().ReferenceId.Should().Be("1"); actual.SearchResults.First().SearchResults.Count.Should().BeGreaterOrEqualTo(1); actual.SearchResults.Last().ReferenceId.Should().Be("2"); actual.SearchResults.Last().SearchResults.Count.Should().BeGreaterOrEqualTo(1); }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <exception cref="ApiException">A server side error occurred.</exception> public async System.Threading.Tasks.Task <BatchSearchResult> ApiV1MusicGetsonginfosAsync(BatchSearchRequest searchRequest, System.Threading.CancellationToken cancellationToken) { if (searchRequest == null) { throw new System.ArgumentNullException("searchRequest"); } var urlBuilder_ = new System.Text.StringBuilder(); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/v1/Music/GetSongInfos"); var client_ = _httpClient; try { using (var request_ = new System.Net.Http.HttpRequestMessage()) { var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(searchRequest, _settings.Value)); content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); request_.Content = content_; request_.Method = new System.Net.Http.HttpMethod("POST"); request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); PrepareRequest(client_, request_, urlBuilder_); var url_ = urlBuilder_.ToString(); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); PrepareRequest(client_, request_, url_); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); try { var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); if (response_.Content != null && response_.Content.Headers != null) { foreach (var item_ in response_.Content.Headers) { headers_[item_.Key] = item_.Value; } } ProcessResponse(client_, response_); var status_ = ((int)response_.StatusCode).ToString(); if (status_ == "200") { var objectResponse_ = await ReadObjectResponseAsync <BatchSearchResult>(response_, headers_).ConfigureAwait(false); return(objectResponse_.Object); } else if (status_ != "200" && status_ != "204") { var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); throw new ApiException("The HTTP status code of the response was not expected (" + (int)response_.StatusCode + ").", (int)response_.StatusCode, responseData_, headers_, null); } return(default(BatchSearchResult)); } finally { if (response_ != null) { response_.Dispose(); } } } } finally { } }
/// <exception cref="ApiException">A server side error occurred.</exception> public System.Threading.Tasks.Task <BatchSearchResult> ApiV1MusicGetsonginfosAsync(BatchSearchRequest searchRequest) { return(ApiV1MusicGetsonginfosAsync(searchRequest, System.Threading.CancellationToken.None)); }
public BatchSearchResponse Search(BatchSearchRequest request) { return(_webApiService.Post <BatchSearchResponse>(_wiseSearchUrl, "searchindex/batchsearch", request)); }