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()
                });
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        /// <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
            {
            }
        }
Exemple #6
0
 /// <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));
 }
Exemple #7
0
 public BatchSearchResponse Search(BatchSearchRequest request)
 {
     return(_webApiService.Post <BatchSearchResponse>(_wiseSearchUrl, "searchindex/batchsearch", request));
 }