Example #1
0
        private void SetResponseNextFrom(BpmSearchResponse bpmSearchResponse, ESSearchResponse esSearchResponse,
                                         SearchRequestQuery searchRequestQuery)
        {
            var lastNeededHitId = bpmSearchResponse.Data.Last().Id;
            var lastIndexFromElasticResponce =
                esSearchResponse.SearchResult.Hits.ToList()
                .FindIndex(x => string.Equals(x.Id, lastNeededHitId, StringComparison.InvariantCultureIgnoreCase));

            bpmSearchResponse.NextFrom = searchRequestQuery.From + lastIndexFromElasticResponce + 1;
        }
Example #2
0
        private SearchRequestQuery GetDefaultSearchRequestQuery(int countRecord, int pageNum, int from)
        {
            var size = countRecord + AdditionalRecordsCount;
            var searchRequestQuery = new SearchRequestQuery {
                From      = from + pageNum * size,
                Size      = size,
                Source    = new ESSource(),
                Highlight = new EShighlight()
            };

            return(searchRequestQuery);
        }
Example #3
0
        public string Search(string queryString, string sectionEntityName, int recordCount, string type = "", int from = 0)
        {
            int pageNum = 0;
            int totalFoundRecordCount             = -1;
            SearchRequestQuery searchRequestQuery = null;
            BpmSearchResponse  bpmSearchResponse  = null;

            while (GetNeedLoadNextPage(bpmSearchResponse, searchRequestQuery, totalFoundRecordCount, recordCount))
            {
                searchRequestQuery = SearchHelper.GetSearchScoreRequestQuery(queryString, sectionEntityName, recordCount, pageNum, from);
                var           request  = PrepareRequest(searchRequestQuery, type);
                IRestResponse response = ExecutePostRequest(request);
                if (response.ResponseStatus != RestSharp.ResponseStatus.Completed)
                {
                    var errorMessage = GetErrorResponse(response);
                    return(JsonSerializer.Serialize(errorMessage));
                }
                var esSearchResponse = JsonConvert.DeserializeObject <ESSearchResponse>(response.Content);
                if (esSearchResponse.SearchResult == null)
                {
                    _metricReporter.Report(new ErrorMetric {
                        SearchErrorCode = GlobalSearchErrorCode.ElasticError
                    });
                    return(JsonSerializer.Serialize(GetErrorResponse(response, new ErrorInfo {
                        Message = "Search result is empty",
                        ErrorCode = "EmptyResult"
                    })));
                }
                _metricReporter.Report(new SearchMetric {
                    Duration = esSearchResponse.Took
                });
                var processedEsResponse = SearchHelper.ProccessESSearchResponse(esSearchResponse);
                totalFoundRecordCount = processedEsResponse.Total;
                if (bpmSearchResponse == null)
                {
                    bpmSearchResponse = processedEsResponse;
                }
                else
                {
                    bpmSearchResponse.Data.AddRange(processedEsResponse.Data);
                }
                if (bpmSearchResponse.Data.Count >= recordCount)
                {
                    bpmSearchResponse.Data = bpmSearchResponse.Data.Take(recordCount).ToList();
                    SetResponseNextFrom(bpmSearchResponse, esSearchResponse, searchRequestQuery);
                }
                pageNum++;
            }
            return(JsonSerializer.Serialize(bpmSearchResponse));
        }
Example #4
0
 private bool GetNeedLoadNextPage(BpmSearchResponse bpmSearchResponse, SearchRequestQuery searchRequestQuery, int totalFoundRecordCount, int recordCount)
 {
     return(GetNeedLoadRecords(recordCount, bpmSearchResponse) && HasAvailableElasticRecords(searchRequestQuery, totalFoundRecordCount));
 }
Example #5
0
 private bool HasAvailableElasticRecords(SearchRequestQuery searchRequestQuery, int totalFoundRecordCount)
 {
     return(searchRequestQuery == null || searchRequestQuery.From + searchRequestQuery.Size < totalFoundRecordCount);
 }