public async Task <ISearchResponse <T> > Search <T, TRequest>(TRequest request) where T : class where TRequest : class { try { var esNodes = string.Join(';', _esClient.ConnectionSettings.ConnectionPool.Nodes.Select(x => x.Uri)); _logger.LogDebug($"ElasticSearch Search begins {esNodes}"); if (request == null) { return(new SearchResponse <T>()); } HousingSearchRequest searchRequest = (HousingSearchRequest)(object)request; var pageOffset = _pagingHelper.GetPageOffset(searchRequest.PageSize, searchRequest.Page); var result = await _esClient.SearchAsync <T>(x => x.Index(_indexSelector.Create <T>()) .Query(q => BaseQuery <T>().Create(request, q)) .PostFilter(q => _filterFactory.Create <T, TRequest>(request).GetDescriptor(q, request)) .Sort(_sortFactory.Create <T, TRequest>(request).GetSortDescriptor) .Size(searchRequest.PageSize) .Skip(pageOffset) .TrackTotalHits()).ConfigureAwait(false); _logger.LogDebug("ElasticSearch Search ended"); return(result); } catch (ElasticsearchClientException e) { _logger.LogError(e, "ElasticSearch Search threw an ElasticSearchClientException. DebugInfo: " + e.DebugInformation); throw; } catch (Exception e) { _logger.LogError(e, "ElasticSearch Search threw an exception"); throw; } }
public LuceneModelFilter ParseQuery(string defaultField, NameValueCollection queryParameters) { var orderbyField = queryParameters[StringConstants.OrderByParameter]; var query = queryParameters[StringConstants.QueryParameter]; //var selects = queryParameters[StringConstants.SelectParameter]; var filter = queryParameters[StringConstants.FilterParameter]; var skip = queryParameters[StringConstants.SkipParameter]; var top = queryParameters[StringConstants.TopParameter]; var luceneQuery = m_queryFactory.Create(query); //var luceneSelectFilter = m_selectFilterFactory.Create(selects); var luceneFilter = m_filterFactory.Create(filter); var luceneSort = m_sortFactory.Create(orderbyField); //Validation on Skip/Top var skipValue = -1; if (skip.IsNullOrWhiteSpace() == false && int.TryParse(skip, out skipValue) == false) { throw new FormatException("When specified, the Skip parameter must be an integer."); } var topValue = -1; if (top.IsNullOrWhiteSpace() == false && int.TryParse(top, out topValue) == false) { throw new FormatException("When specified, the Top parameter must be an integer."); } var modelFilter = new LuceneModelFilter { Query = luceneQuery, //SelectFilter = luceneSelectFilter, Filter = luceneFilter, Sort = luceneSort, Skip = skipValue, Take = topValue }; return(modelFilter); }