protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var max = response.Aggs.Max("max_commits");
			max.Should().NotBeNull();
			max.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitsAvg = response.Aggs.Average("average_commits");
			commitsAvg.Should().NotBeNull();
			commitsAvg.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			/** === Handling Responses
			* Using the `.Agg` aggregation helper we can fetch our aggregation results easily 
			* in the correct type. <<aggs-vs-aggregations, Be sure to read more about .Aggs vs .Aggregations>>
			*/
			response.IsValid.Should().BeTrue();

			var filterAgg = response.Aggs.Filters("projects_by_state");
			filterAgg.Should().NotBeNull();

			var namedResult = filterAgg.NamedBucket("belly_up");
			namedResult.Should().NotBeNull();
			namedResult.DocCount.Should().BeGreaterThan(0);

			namedResult = filterAgg.NamedBucket("stable");
			namedResult.Should().NotBeNull();
			namedResult.DocCount.Should().BeGreaterThan(0);

			namedResult = filterAgg.NamedBucket("very_active");
			namedResult.Should().NotBeNull();
			namedResult.DocCount.Should().BeGreaterThan(0);

			namedResult = filterAgg.NamedBucket("other_states_of_being");
			namedResult.Should().NotBeNull();
			namedResult.DocCount.Should().Be(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var projectCount = response.Aggs.Cardinality("state_count");
			projectCount.Should().NotBeNull();
			projectCount.Value.Should().Be(3);
        }
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitsSum = response.Aggs.Sum("commits_sum");
			commitsSum.Should().NotBeNull();
			commitsSum.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var sigNames = response.Aggs.SignificantTerms("significant_names");
			sigNames.Should().NotBeNull();
			sigNames.DocCount.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var min = response.Aggs.Max("min_commits");
			min.Should().NotBeNull();
			min.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitCount = response.Aggs.ValueCount("commit_count");
			commitCount.Should().NotBeNull();
			commitCount.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var sumTheHardWay = response.Aggs.ScriptedMetric("sum_the_hard_way");
			sumTheHardWay.Should().NotBeNull();
			sumTheHardWay.Value<int>().Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var min = response.Aggs.Min("min_last_activity");
			min.Should().NotBeNull();
			min.Value.Should().BeGreaterThan(0);
			min.ValueAsString.Should().NotBeNullOrEmpty();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var allProjects = response.Aggs.Global("all_projects");
			allProjects.Should().NotBeNull();
			var names = allProjects.Terms("names");
			names.Should().NotBeNull();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commits = response.Aggs.Histogram("commits");
			commits.Should().NotBeNull();
			foreach (var item in commits.Items)
				item.DocCount.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var ringsAroundAmsterdam = response.Aggs.GeoDistance("rings_around_amsterdam");
			ringsAroundAmsterdam.Should().NotBeNull();
			ringsAroundAmsterdam.Items.Where(r => r.Key == "*-100.0").FirstOrDefault().Should().NotBeNull();
			ringsAroundAmsterdam.Items.Where(r => r.Key == "100.0-300.0").FirstOrDefault().Should().NotBeNull();
			ringsAroundAmsterdam.Items.Where(r => r.Key == "300.0-*").FirstOrDefault().Should().NotBeNull();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitsOutlier = response.Aggs.Percentiles("commits_outlier");
			commitsOutlier.Should().NotBeNull();
			commitsOutlier.Items.Should().NotBeNullOrEmpty();
			foreach (var item in commitsOutlier.Items)
				item.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var commitsOutlier = response.Aggs.PercentileRanks("commits_outlier");
			commitsOutlier.Should().NotBeNull();
			commitsOutlier.Items.Should().NotBeNullOrEmpty();
			foreach (var item in commitsOutlier.Items)
				item.Should().NotBeNull();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var commitsAvg = response.Aggs.Average("average_commits");
			commitsAvg.Should().NotBeNull();
			commitsAvg.Value.Should().BeGreaterThan(0);
			commitsAvg.Meta.Should().NotBeNull().And.HaveCount(1);
			commitsAvg.Meta["foo"].Should().Be("bar");
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();

			var sample = response.Aggs.Sampler("sample");
			sample.Should().NotBeNull();
			var sigTags = sample.SignificantTerms("significant_names");
			sigTags.Should().NotBeNull();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeFalse();
			var serverError = response.ServerError;
			serverError.Should().NotBeNull();
			serverError.Status.Should().Be(400);
			serverError.Error.Reason.Should().Be("all shards failed");
			serverError.Error.RootCause.First().Reason.Should().Contain("[-1m]");

		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.ShouldBeValid();
			var matrix = response.Aggs.MatrixStats("matrixstats");
			matrix.Should().NotBeNull();
			matrix.Fields.Should().NotBeNull().And.HaveCount(2);

			AssertField(matrix, "numberOfCommits");
			AssertField(matrix, "numberOfContributors");
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitRanges = response.Aggs.Range("commit_ranges");
			commitRanges.Should().NotBeNull();
			commitRanges.Buckets.Count.Should().Be(3);
			commitRanges.Buckets.Where(r => r.Key == "*-100.0").FirstOrDefault().Should().NotBeNull();
			commitRanges.Buckets.Where(r => r.Key == "100.0-500.0").FirstOrDefault().Should().NotBeNull();
			commitRanges.Buckets.Where(r => r.Key == "500.0-*").FirstOrDefault().Should().NotBeNull();
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var ipRanges = response.Aggs.IpRange("ip_ranges");
			ipRanges.Should().NotBeNull();
			ipRanges.Buckets.Should().NotBeNull();
			ipRanges.Buckets.Count.Should().BeGreaterThan(0);
			foreach (var range in ipRanges.Buckets)
				range.DocCount.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var centroid = response.Aggs.GeoCentroid("centroid");
			centroid.Should().NotBeNull();
			centroid.Location.Should().NotBeNull();

			centroid.Location.Latitude.Should().NotBe(0);
			centroid.Location.Longitude.Should().NotBe(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var states = response.Aggs.Terms("states");
			states.Should().NotBeNull();
			foreach (var item in states.Items)
			{
				item.Key.Should().NotBeNullOrEmpty();
				item.DocCount.Should().BeGreaterOrEqualTo(1);
			}
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var commitStats = response.Aggs.Stats("commit_stats");
			commitStats.Should().NotBeNull();
			commitStats.Average.Should().BeGreaterThan(0);
			commitStats.Max.Should().BeGreaterThan(0);
			commitStats.Min.Should().BeGreaterThan(0);
			commitStats.Count.Should().BeGreaterThan(0);
			commitStats.Sum.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();

			foreach (var document in response.Documents)
			{
				document.Name.Should().NotBeNull();
				document.StartedOn.Should().NotBe(default(DateTime));
				document.Description.Should().BeNull();
			}
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeFalse();

			response.ServerError.Should().NotBeNull();
			response.ServerError.Status.Should().Be(400);
			response.ServerError.Error.Should().NotBeNull();
			var rootCauses = response.ServerError.Error.RootCause;
			rootCauses.Should().NotBeNullOrEmpty();
			var rootCause = rootCauses.First();
			rootCause.Type.Should().Be("parsing_exception");
		}
示例#27
0
 protected void TestDefaultAssertions(ISearchResponse<ElasticsearchProject> queryResponse)
 {
     Assert.True(queryResponse.IsValid, "response is not valid");
     Assert.NotNull(queryResponse.ConnectionStatus, "connection status is null");
     Assert.Null(queryResponse.ConnectionStatus.OriginalException, "exception should not be set");
     Assert.True(queryResponse.Total > 0, "Query yielded no results as indicated by total returned from ES");
     Assert.True(queryResponse.Documents.Any(), "documents.any() is false");
     Assert.True(queryResponse.Documents.Count() > 0, "documents.count is 0");
     Assert.True(queryResponse.Shards.Total > 0, "did not hit any shard");
     Assert.True(queryResponse.Shards.Successful == queryResponse.Shards.Total, "Not all the shards were hit succesfully");
     Assert.True(queryResponse.Shards.Failed == 0, "shards failed is not null");
 }
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();

			var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month");
			projectsPerMonth.Should().NotBeNull();
			projectsPerMonth.Buckets.Should().NotBeNull();
			projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0);

			var averageCommits = response.Aggs.AverageBucket("average_commits_per_month");
			averageCommits.Should().NotBeNull();
			averageCommits.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();

			var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month");
			projectsPerMonth.Should().NotBeNull();
			projectsPerMonth.Items.Should().NotBeNull();
			projectsPerMonth.Items.Count.Should().BeGreaterThan(0);

			var commitsSum = response.Aggs.SumBucket("sum_of_commits");
			commitsSum.Should().NotBeNull();
			commitsSum.Value.Should().BeGreaterThan(0);
		}
		protected override void ExpectResponse(ISearchResponse<Project> response)
		{
			response.IsValid.Should().BeTrue();
			var tags = response.Aggs.Nested("tags");
			tags.Should().NotBeNull();
			var tagNames = tags.Terms("tag_names");
			tagNames.Should().NotBeNull();
			foreach(var item in tagNames.Buckets)
			{
				item.Key.Should().NotBeNullOrEmpty();
				item.DocCount.Should().BeGreaterThan(0);
			}
		}
        private static Dictionary <int, long?> BuildLevelAggregationResult(ISearchResponse <ApprenticeshipSearchResultsDocument> results)
        {
            var levelAggregation = new Dictionary <int, long?>();

            if (results.Aggregations.Terms(LevelAggregateName) != null)
            {
                foreach (var item in results.Aggregations.Terms(LevelAggregateName).Buckets)
                {
                    int iKey;
                    if (int.TryParse(item.Key, out iKey))
                    {
                        levelAggregation.Add(iKey, item.DocCount);
                    }
                }
            }

            return(levelAggregation);
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            /** === Handling Responses
             * The `AggregateDictionary found on `.Aggregations` on `ISearchResponse<T>` has several helper methods
             * so we can fetch our aggregation results easily in the correct type.
             * <<handling-aggregate-response, Be sure to read more about these helper methods>>
             */
            response.ShouldBeValid();

            var filterAgg = response.Aggregations.Filter("bethels_projects");

            filterAgg.Should().NotBeNull();
            filterAgg.DocCount.Should().BeGreaterThan(0);
            var tags = filterAgg.Terms("project_tags");

            tags.Should().NotBeNull();
            tags.Buckets.Should().NotBeEmpty();
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();

            var projectsPerMonth = response.Aggregations.DateHistogram("projects_started_per_month");

            projectsPerMonth.Should().NotBeNull();
            projectsPerMonth.Buckets.Should().NotBeNull();
            projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0);

            // percentiles not calculated for the first bucket
            foreach (var item in projectsPerMonth.Buckets.Skip(1))
            {
                var movingPercentiles = item.MovingPercentiles("moving_percentiles");
                movingPercentiles.Should().NotBeNull();
                movingPercentiles.Items.Should().NotBeNull();
            }
        }
示例#34
0
        public static ISearchResponse <TResult> Search <T, TResult>(IElasticClient elasticClient, Func <SearchDescriptor <T>, SearchDescriptor <T> > searchSelector)
            where T : class
            where TResult : class
        {
            ISearchResponse <TResult> response = null;

            var stopwatch = Stopwatch.StartNew();

            // on n'a pas forcément de serveur Elasticsearch, alors on commente l'appel (#ES_BYPASS)
            //response = elasticClient.Search<T, TResult>(searchSelector);

            // on simule l'attente de l'appel au serveur Elasticsearch
            Thread.Sleep(new Random().Next(10, 50));

            Console.WriteLine($"[Search<T, TResult>(Func<...>)     ] Duration: {stopwatch.ElapsedMilliseconds}ms");

            return(response);
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            /** ==== Handling responses
             * The `AggregateDictionary found on `.Aggregations` on `SearchResponse<T>` has several helper methods
             * so we can fetch our aggregation results easily in the correct type.
             * <<handling-aggregate-response, Be sure to read more about these helper methods>>
             */
            response.ShouldBeValid();

            var dateHistogram = response.Aggregations.AutoDateHistogram("projects_started_per_month");

            dateHistogram.Should().NotBeNull();
            dateHistogram.Interval.Should().NotBeNull();
            dateHistogram.Buckets.Should().NotBeNull();
            dateHistogram.Buckets.Count.Should().BeGreaterThan(1);
            foreach (var item in dateHistogram.Buckets)
            {
                item.Date.Should().NotBe(default);
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();
            var states = response.Aggregations.Terms <StateOfBeing>("states");

            states.Should().NotBeNull();
            states.DocCountErrorUpperBound.Should().HaveValue();
            states.SumOtherDocCount.Should().HaveValue();
            states.Buckets.Should().NotBeNull();
            states.Buckets.Count.Should().BeGreaterThan(0);
            foreach (var item in states.Buckets)
            {
                item.Key.Should().BeOfType <StateOfBeing>();
                item.DocCount.Should().BeGreaterOrEqualTo(1);
            }
            states.Meta.Should().NotBeNull().And.HaveCount(1);
            states.Meta["foo"].Should().Be("bar");
        }
示例#37
0
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.IsValid.Should().BeTrue();

            var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month");

            projectsPerMonth.Should().NotBeNull();
            projectsPerMonth.Items.Should().NotBeNull();
            projectsPerMonth.Items.Count.Should().BeGreaterThan(0);

            // derivative not calculated for the first bucket
            foreach (var item in projectsPerMonth.Items.Skip(1))
            {
                var commitsDerivative = item.Derivative("commits_derivative");
                commitsDerivative.Should().NotBeNull();
                commitsDerivative.Value.Should().NotBe(null);
            }
        }
示例#38
0
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();

            var projectsPerMonth = response.Aggregations.DateHistogram("projects_started_per_month");

            projectsPerMonth.Should().NotBeNull();
            projectsPerMonth.Buckets.Should().NotBeNull();
            projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0);

            // average not calculated for the first bucket
            foreach (var item in projectsPerMonth.Buckets.Skip(1))
            {
                var movingAvg = item.MovingAverage("commits_moving_avg");
                movingAvg.Should().NotBeNull();
                movingAvg.Value.Should().BeGreaterThan(0);
            }
        }
        public ActionResult QuickSearch(string[] options, string searchparam, int page = 1)
        {
            ISearchResponse <Doc> searchResponse = null;

            if (options.FirstOrDefault() == "match")
            {
                searchResponse = ESQueryService.Match(searchparam, page);
            }
            else
            {
                searchResponse = ESQueryService.MatchPhrase(searchparam, page);
            }
            ViewBag.Match       = options.FirstOrDefault();
            ViewBag.Page        = page;
            ViewBag.SearchParam = searchparam;

            return(View(searchResponse));
        }
示例#40
0
        /// <summary>
        /// Search for Terms based on the search criteria.
        /// </summary>
        /// <param name="dictionary">The value for dictionary.</param>
        /// <param name="audience">Patient or Healthcare provider</param>
        /// <param name="language">The language in which the details needs to be fetched</param>
        /// <param name="searchText">The text to search for.</param>
        /// <param name="matchType">Set to true to allow search to find terms which contain the query string instead of explicitly starting with it.</param>
        /// <param name="size">The number of records to retrieve.</param>
        /// <returns>An array of Suggestion objects</returns>
        public async Task <Suggestion[]> GetSuggestions(string dictionary, AudienceType audience, string language, string searchText, MatchType matchType, int size)
        {
            // Set up the SearchRequest to send to elasticsearch.
            Indices index = Indices.Index(new string[] { this._apiOptions.AliasName });
            Types   types = Types.Type(new string[] { "terms" });

            ISearchResponse <Suggestion> response = null;

            try
            {
                SearchRequest request;
                switch (matchType)
                {
                default:
                case MatchType.Begins:
                case MatchType.Exact:
                    request = BuildNonContainsRequest(index, types, dictionary, language, audience, searchText, matchType, size);
                    break;

                case MatchType.Contains:
                    request = BuildContainsRequest(index, types, dictionary, language, audience, searchText, size);
                    break;
                }

                response = await _elasticClient.SearchAsync <Suggestion>(request);
            }
            catch (Exception ex)
            {
                string msg = $"Could not search dictionary '{dictionary}', audience '{audience}', and language '{language}'.";
                _logger.LogError($"Error searching index: '{this._apiOptions.AliasName}'.");
                _logger.LogError(ex, msg);
                throw new APIErrorException(500, msg);
            }

            if (!response.IsValid)
            {
                _logger.LogError($"Invalid response when searching for dictionary '{dictionary}', audience '{audience}', language '{language}', query '{searchText}', contains '{matchType}', size '{size}'.");
                throw new APIErrorException(500, "errors occured");
            }

            List <Suggestion> retVal = new List <Suggestion>(response.Documents);

            return(retVal.ToArray());
        }
示例#41
0
        private ISearchDocumentDTO GetSearchDocumentDTO(ISearchResponse <dynamic> response)
        {
            ISearchDocumentDTO searchDocument = new SearchDocumentDTO();

            searchDocument.Results = new List <ISearchResultDocumentDTO>();

            searchDocument.Count = response.Total;

            if (response != null && response.Hits != null)
            {
                foreach (var hit in response.Hits)
                {
                    ISearchResultDocumentDTO result = new SearchResultDocumentDTO();
                    result.Score = hit.Score;

                    switch (hit.Type)
                    {
                    case "article":
                        ArticleAdo article = hit.Source;
                        Map_ArticleAdo_To_SearchResultDocumentDTO(article, result);
                        break;

                    case "research-topic":
                        Journal.Public.DataAccess.ElasticSearch.ADO.ResearchTopic.ResearchTopicAdo researchTopic = hit.Source;
                        Map_ResearchTopicAdo_To_SearchResultDocumentDTO(researchTopic, result);
                        break;

                    case "editorial-board-user":
                        EditorialBoardUserAdo editorialBoard = hit.Source;
                        Map_EditorialBoardUserAdo_To_SearchResultDocumentDTO(editorialBoard, result);
                        break;

                    case "journal":
                        Journal.Public.DataAccess.ElasticSearch.ADO.Journal.JournalAdo journal = hit.Source;
                        Map_JournalAdo_To_SearchResultDocumentDTO(journal, result);
                        break;
                    }

                    searchDocument.Results.Add(result);
                }
            }

            return(searchDocument);
        }
示例#42
0
        private static List <Aggs> ExtractPipeAggs(ISearchResponse <T> r)
        {
            var aggss = new List <Aggs>();

            foreach (var ag in r.Aggregations)
            {
                var segs = ag.Key.Split('_');
                switch (segs[0])
                {
                case "area":
                    var areas    = r.Aggs.Terms("area");
                    var areaAggs = new Aggs("area");
                    foreach (var b in areas.Buckets)
                    {
                        if (b.Aggregations.Count > 0)
                        {
                            var agg = new Agg();
                            agg.count = b.DocCount ?? 0;
                            agg.value = Math.Round(b.Average(segs[1] /*"ave_sal"*/).Value ?? 0, 2);
                            areaAggs.aggs.Add(agg);
                        }
                    }
                    aggss.Add(areaAggs);
                    break;

                case "mon":
                    var mons    = r.Aggs.DateHistogram("mon");
                    var monAggs = new Aggs("mon");
                    foreach (var b in mons.Buckets)
                    {
                        if (b.Aggregations.Count > 0)
                        {
                            var agg = new Agg();
                            agg.count = b.DocCount ?? 0;
                            agg.value = Math.Round(b.Average(/*"ave_sal"*/ segs[1]).Value ?? 0, 2);
                            monAggs.aggs.Add(agg);
                        }
                    }
                    aggss.Add(monAggs);
                    break;
                }
            }
            return(aggss);
        }
示例#43
0
        public IBulkResponse IndexSearchResults(ISearchResponse <T> searchResult, IObserver <IReindexResponse <T> > observer, IndexName toIndex, int page)
        {
            if (!searchResult.IsValid)
            {
                throw Throw($"Indexing failed on scroll #{page}.", searchResult.ApiCall);
            }

            var hits           = searchResult.Hits.ToList();
            var bulkOperations = new List <IBulkOperation>(hits.Count);

            foreach (var h in hits)
            {
                var item = new BulkIndexOperation <T>(h.Source)
                {
                    Type      = h.Type,
                    Index     = toIndex,
                    Id        = h.Id,
                    Routing   = h.Routing,
                    Timestamp = h.Timestamp
                };
                if (h.Parent != null)
                {
                    item.Parent = h.Parent;
                }
                if (h.Ttl.HasValue)
                {
                    item.Ttl = h.Ttl;
                }
                this.Alter?.Invoke(h, h.Source, item);
                bulkOperations.Add(item);
            }

            var indexResult = this._client.Bulk(new BulkRequest {
                Operations = bulkOperations
            });

            if (!indexResult.IsValid)
            {
                throw Throw($"Failed indexing page {page}.", indexResult.ApiCall);
            }

            return(indexResult);
        }
示例#44
0
        public void SimpleTermFacet()
        {
            ISearchResponse <ElasticsearchProject> queryResults = this.SearchRaw <ElasticsearchProject>(
                @" { ""query"" : {
							""match_all"" : { }
					},
					""facets"" : {
					  ""followers.lastName"" : { ""terms"" : {""field"" : ""followers.lastName""} }
					}
				}"
                );

            var facet = queryResults.Facets["followers.lastName"];

            this.TestDefaultAssertions(queryResults);
            Assert.IsInstanceOf <TermFacet>(facet);
            var tf = (TermFacet)facet;

            Assert.AreEqual(0, tf.Missing);
            Assert.Greater(tf.Other, 0);
            Assert.Greater(tf.Total, 0);
            Assert.Greater(tf.Items.Count(), 0);

            foreach (TermItem term in tf.Items)
            {
                Assert.Greater(term.Count, 0);
                Assert.IsNotNullOrEmpty(term.Term);
            }

            tf = queryResults.Facet <TermFacet>(p => p.Followers.Select(f => f.LastName));
            Assert.AreEqual(0, tf.Missing);
            Assert.Greater(tf.Other, 0);
            Assert.Greater(tf.Total, 0);
            Assert.Greater(tf.Items.Count(), 0);

            var items = queryResults.FacetItems <TermItem>(p => p.Followers.Select(f => f.LastName));

            foreach (var i in items)
            {
                Assert.Greater(i.Count, 0);
                Assert.IsNotNullOrEmpty(i.Term);
            }
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.IsValid.Should().BeTrue();

            /**
             * Using the `.Agg` aggregation helper we can fetch our aggregation results easily
             * in the correct type. [Be sure to read more about `.Agg` vs `.Aggregations` on the response here]()
             */
            var dateHistogram = response.Aggs.DateHistogram("projects_started_per_month");

            dateHistogram.Should().NotBeNull();
            dateHistogram.Items.Should().NotBeNull();
            dateHistogram.Items.Count.Should().BeGreaterThan(10);
            foreach (var item in dateHistogram.Items)
            {
                item.Date.Should().NotBe(default(DateTime));
                item.DocCount.Should().BeGreaterThan(0);
            }
        }
示例#46
0
 public TextResourceContract ProcessSearchPageByCriteria(ISearchResponse <TextResourceContract> response)
 {
     if (!response.IsValid)
     {
         throw new FulltextDatabaseException(response.DebugInformation);
     }
     foreach (var hit in response.Hits)
     {
         foreach (var value in hit.Highlights.Values)
         {
             foreach (var highlight in value.Highlights)
             {
                 hit.Source.PageText = highlight;
                 return(hit.Source);
             }
         }
     }
     return(null);
 }
#pragma warning restore 618, 612

        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();

            var projectsPerMonth = response.Aggregations.DateHistogram("projects_started_per_month");

            projectsPerMonth.Should().NotBeNull();
            projectsPerMonth.Buckets.Should().NotBeNull();
            projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0);

            var commitsStats = response.Aggregations.StatsBucket("stats_commits_per_month");

            commitsStats.Should().NotBeNull();
            commitsStats.Average.Should().BeGreaterThan(0);
            commitsStats.Max.Should().BeGreaterThan(0);
            commitsStats.Min.Should().BeGreaterThan(0);
            commitsStats.Count.Should().BeGreaterThan(0);
            commitsStats.Sum.Should().BeGreaterThan(0);
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();

            var projectsPerMonth = response.Aggs.DateHistogram("projects_started_per_month");

            projectsPerMonth.Should().NotBeNull();
            projectsPerMonth.Buckets.Should().NotBeNull();
            projectsPerMonth.Buckets.Count.Should().BeGreaterThan(0);

            var commitsOutlier = response.Aggs.PercentilesBucket("commits_outlier");

            commitsOutlier.Should().NotBeNull();
            commitsOutlier.Items.Should().NotBeNullOrEmpty();
            foreach (var item in commitsOutlier.Items)
            {
                item.Value.Should().BeGreaterThan(0);
            }
        }
示例#49
0
        public DataSet Search(string searchText, IIdentity identity)
        {
            ISearchResponse <object> response =
                _client.Search <object>(s => s.Types("bug")
                                        .Query(q => q.QueryString(d => d.Query(searchText)))
                                        .Take(500) //Maximum of 500 results just to avoid major performance problems
                                        .Highlight(h => h.PreTags("<span class='highlighted'>")
                                                   .PostTags("</span>")
                                                   .OnFields(f => f.OnField("*"))));


            DataSet   results     = GetSearchResultDataSet();
            DataTable resultTable = results.Tables[0];

            var filteredHits = GetHitsFilteredBySecurity(response, identity);

            foreach (var hit in filteredHits)
            {
                DataRow resultRow = resultTable.NewRow();

                JObject bug   = (JObject)hit.Source;
                int     bugId = Convert.ToInt32(bug["bg_id"]);

                resultRow[ResultColumns.Color] = "#ffffff";

                resultRow[ResultColumns.Id]          = bugId;
                resultRow[ResultColumns.Description] = bug["desc"].ToString();
                if (hit.Highlights.Any())
                {
                    var highlight = hit.Highlights.First();
                    resultRow[ResultColumns.Source] = highlight.Value.Field;
                    resultRow[ResultColumns.Text]   = highlight.Value.Highlights.FirstOrDefault();
                }

                resultRow[ResultColumns.Date]   = bug["bg_reported_date"].ToString();
                resultRow[ResultColumns.Status] = bug["status"].ToString();
                resultRow[ResultColumns.Score]  = Convert.ToDecimal(hit.Score);

                resultTable.Rows.Add(resultRow);
            }

            return(results);
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.IsValid.Should().BeTrue();

            /**
             * Using the `.Agg` aggregation helper we can fetch our aggregation results easily
             * in the correct type. [Be sure to read more about `.Agg` vs `.Aggregations` on the response here]()
             */
            var filterAgg = response.Aggs.Filters("projects_by_state");

            filterAgg.Should().NotBeNull();
            var results = filterAgg.AnonymousBuckets();

            results.Count.Should().Be(3);
            foreach (var singleBucket in results)
            {
                singleBucket.DocCount.Should().BeGreaterThan(0);
            }
        }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.ShouldBeValid();

            var composite = response.Aggregations.Composite("my_buckets");

            composite.Should().NotBeNull();
            composite.Buckets.Should().NotBeNullOrEmpty();
            composite.AfterKey.Should().NotBeNull();
            composite.AfterKey.Should().HaveCount(1).And.ContainKeys("started");
            foreach (var item in composite.Buckets)
            {
                var key = item.Key;
                key.Should().NotBeNull();

                key.TryGetValue("started", out string startedString).Should().BeTrue();
                startedString.Should().NotBeNullOrWhiteSpace();
            }
        }
示例#52
0
        public ListResult <sdk.Account> Find(int skip, int take, string keyword = "", string order_by = "", bool descending = false)
        {
            return(base.ExecuteFunction("Find", delegate()
            {
                int takePlus = take;
                if (take != int.MaxValue)
                {
                    takePlus++; // for stepping
                }

                QueryContainer query = Query <sdk.Account>
                                       .MultiMatch(m => m
                                                   .Query(keyword)
                                                   .Type(TextQueryType.PhrasePrefix)
                                                   .Fields(mf => mf
                                                           .Field(f => f.email)
                                                           ));



                SortOrder sortOrder = SortOrder.Ascending;
                if (descending)
                {
                    sortOrder = SortOrder.Descending;
                }
                if (string.IsNullOrEmpty(order_by))
                {
                    order_by = "";
                }

                ElasticClient client = this.ClientFactory.CreateClient();
                ISearchResponse <sdk.Account> searchResponse = client.Search <sdk.Account>(s => s
                                                                                           .Query(q => query)
                                                                                           .Skip(skip)
                                                                                           .Take(takePlus)
                                                                                           .Sort(r => r.Field(order_by, sortOrder))
                                                                                           .Type(this.DocumentType));

                ListResult <sdk.Account> result = searchResponse.Documents.ToSteppedListResult(skip, take, searchResponse.GetTotalHit());

                return result;
            }));
        }
示例#53
0
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            response.Total.Should().BeGreaterThan(0);
            response.Hits.Count.Should().BeGreaterThan(0);
            response.HitsMetadata.Total.Value.Should().Be(response.Total);
            response.HitsMetadata.Total.Relation.Should().Be(TotalHitsRelation.EqualTo);
            response.Hits.First().Should().NotBeNull();
            response.Hits.First().Source.Should().NotBeNull();
            response.Aggregations.Count.Should().BeGreaterThan(0);
            response.Took.Should().BeGreaterThan(0);
            var startDates = response.Aggregations.Terms("startDates");

            startDates.Should().NotBeNull();

            foreach (var document in response.Documents)
            {
                document.ShouldAdhereToSourceSerializerWhenSet();
            }
        }
示例#54
0
        public static Resp_Brands Brand_Query_Handle(ISearchResponse <OrgCompanyBrand> response, int pg_size)
        {
            var documents = response.Documents; //

            var hits = response.Hits;

            foreach (var hit in hits)
            {
                var hl = hit.Highlights;
                foreach (var pair in hl)
                {
                    if (pair.Key == "ob_name")
                    {
                        var content = pair.Value.Highlights.FirstOrDefault();
                        var doc     = documents.FirstOrDefault(d => d.ob_name == hit.Source.ob_name);
                        if (!string.IsNullOrEmpty(content))
                        {
                            doc.ob_name = content;
                        }
                    }
                }
            }

            var list = documents /*.Take(pg_size)*/.Select(d => d.To_Brand_Abs()).ToList();

            var dict = new Dictionary <string, long>();

            //dict.Add("0", 0);
            if (response.Aggregations.ContainsKey("term_class"))
            {
                var agg = (BucketAggregate)response.Aggregations["term_class"];

                foreach (var i in agg.Items)
                {
                    var pair = (KeyedBucket)i;
                    dict.Add(pair.Key, pair.DocCount ?? 0);
                }
            }
            return(new Resp_Brands()
            {
                brand_list = list, class_agg = dict, count = response.Total
            });
        }
示例#55
0
 private static void ExtractFilter(Q.Query <Displayable> query, ISearchResponse <ElasticTitleIndex> results)
 {
     query.Filters = new ConcurrentDictionary <string, List <FacetFilter> >();
     lock (query.Filters)
     {
         if (query.ScopeId > 0)
         {
             query.Filters.TryAdd(SearchConstants.Ownership,
                                  GetOwnershipFacetFilter(results.Aggregations[SearchConstants.Ownership] as SingleBucketAggregate,
                                                          query.Facets));
         }
         query.Filters.TryAdd(SearchConstants.ListPrice,
                              GetListPriceFacetFilter(results.Aggregations[SearchConstants.ListPrice] as SingleBucketAggregate, query.Facets,
                                                      SearchConstants.MediaType));
         query.Filters.TryAdd(SearchConstants.MediaType,
                              GetFacetFilter(results.Aggregations[SearchConstants.MediaType] as SingleBucketAggregate, query.Facets,
                                             SearchConstants.MediaType));
         query.Filters.TryAdd(SearchConstants.Genre,
                              GetFacetFilter(results.Aggregations[SearchConstants.Genre] as SingleBucketAggregate, query.Facets,
                                             SearchConstants.Genre));
         query.Filters.TryAdd(SearchConstants.Audience,
                              GetFacetFilter(results.Aggregations[SearchConstants.Audience] as SingleBucketAggregate, query.Facets,
                                             SearchConstants.Audience));
         query.Filters.TryAdd(SearchConstants.Language,
                              GetFacetFilter(results.Aggregations[SearchConstants.Language] as SingleBucketAggregate, query.Facets,
                                             SearchConstants.Language));
         query.Filters.TryAdd(SearchConstants.UsageTerm,
                              GetFacetFilter(results.Aggregations[SearchConstants.UsageTerm] as SingleBucketAggregate, query.Facets,
                                             SearchConstants.UsageTerm));
         query.Filters.TryAdd(SearchConstants.Facets.ContentAdvisorySex,
                              GetFacetFilter(results.Aggregations[SearchConstants.ContentAdvisory] as SingleBucketAggregate,
                                             query.Facets,
                                             "sex"));
         query.Filters.TryAdd(SearchConstants.Facets.ContentAdvisoryLanguage,
                              GetFacetFilter(results.Aggregations[SearchConstants.ContentAdvisory] as SingleBucketAggregate,
                                             query.Facets,
                                             "language"));
         query.Filters.TryAdd(SearchConstants.Facets.ContentAdvisoryViolence,
                              GetFacetFilter(results.Aggregations[SearchConstants.ContentAdvisory] as SingleBucketAggregate,
                                             query.Facets,
                                             "violence"));
     }
 }
示例#56
0
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            var myCompletionSuggest = response.Suggest["my-completion-suggest"];

            myCompletionSuggest.Should().NotBeNull();
            var suggest = myCompletionSuggest.First();

            suggest.Text.Should().Be(Project.Instance.Name);
            suggest.Length.Should().BeGreaterThan(0);
            var option = suggest.Options.First();

            option.Text.Should().NotBeNullOrEmpty();
            option.Score.Should().BeGreaterThan(0);
            var payload = option.Payload <ProjectPayload>();

            payload.Should().NotBeNull();
            payload.Name.Should().Be(Project.Instance.Name);
            payload.State.Should().NotBeNull();
        }
示例#57
0
        public ActionResult GetHurricanes(string hurricaneNames)
        {
            var    client    = new ElasticClient();
            string indexName = "linestring1";

            var settings = new ConnectionSettings(new Uri("http://ec2-54-218-10-53.us-west-2.compute.amazonaws.com:9200")).DefaultIndex(indexName);

            client = new ElasticClient(settings);

            List <string> names = hurricaneNames.Split(',').ToList <string>();

            ISearchResponse <LineStringModel> searchResponse = client.Search <LineStringModel>(s => s.Size(2000)
                                                                                               .Query(q => q
                                                                                                      .MatchAll()
                                                                                                      ));



            /*BucketAggregate bucket = (BucketAggregate)searchResponse.Aggregations["hurricanes"];
             *
             * KeyedBucket<LineStringModel> keyedB = (KeyedBucket<LineStringModel>)bucket.Items;
             * List<LineStringModel> documents = new List<LineStringModel>();
             *
             * List<LineStringModel> filteredList = new List<LineStringModel>();
             *
             * foreach (LineStringModel model in documents)
             * {
             *  if (names.Contains(model.name))
             *  {
             *      filteredList.Add(model);
             *  }
             *
             * }*/
            //List<LineStringModel> filteredList = searchResponse.Documents.ToList<LineStringModel>().Where(s => s.name == names[0].ToString()).ToList<LineStringModel>();

            //var allowedStatus = new[] { "A", "B", "C" };
            List <LineStringModel> filteredList = searchResponse.Documents.ToList <LineStringModel>().Where(o => names.Contains(o.name)).ToList <LineStringModel>();

            JsonResult result = Json(filteredList, JsonRequestBehavior.AllowGet);

            return(result);
        }
示例#58
0
        public ElasticSearchResponse <T> Search <T>(AbstractSearchQuery <T> query) where T : class
        {
            SearchDescriptor <T> searchQuery = query.Build();

            int       retryCount    = 0;
            Exception lastException = null;

            while (retryCount < MaxRetry)
            {
                try
                {
                    ISearchResponse <T> searchResponse = _client.Search <T>(searchQuery);
                    if (!searchResponse.IsValid)
                    {
                        throw new ElasticSearchServerException(searchResponse.ServerError.Error);
                    }

                    ElasticSearchResponse <T> response = new ElasticSearchResponse <T>
                    {
                        Count      = searchResponse.Documents.Count(),
                        TotalCount = searchResponse.Total,
                        MaxScore   = searchResponse.MaxScore,
                        Results    = searchResponse.Documents
                    };
                    return(response);
                }
                catch (WebException wex)
                {
                    lastException = wex;
                }
                catch (Exception ex)
                {
                    lastException = ex;
                }

                retryCount++;

                Thread.Sleep(500);
            }

            throw new ElasticSearchException("There was an error occured while performing a search", lastException);
        }
示例#59
0
 private static void ProcessResponse(string data, ISearchResponse <LogItem> searchResults)
 {
     Console.WriteLine("===== Search results {0} =====", data);
     Console.WriteLine("Request:   {0}", System.Text.Encoding.UTF8.GetString(searchResults.ConnectionStatus.Request));
     // Console.WriteLine("Response:  {0}", searchResults.ConnectionStatus.ResponseRaw.ToString());
     if (!searchResults.IsValid)
     {
         Console.WriteLine("Invalid response!!!");
         return;
     }
     if (searchResults.Documents.Any())
     {
         Console.WriteLine("We have docs: {0}", searchResults.Documents.Count());
         foreach (var item in searchResults.Documents)
         {
             Console.WriteLine(" {0}", item);
         }
     }
     if (searchResults.Facets.Any())
     {
         Console.WriteLine("We have facets: {0}", searchResults.Facets.Count());
         foreach (var item in searchResults.Facets)
         {
             Console.WriteLine(" {0}", item);
         }
     }
     if (searchResults.Hits.Any())
     {
         Console.WriteLine("We have hits: {0}", searchResults.Hits.Count());
         foreach (var item in searchResults.Hits)
         {
             Console.WriteLine(" Id:{0} Index:{1}", item.Id, item.Index);
         }
     }
     if (searchResults.Shards.Total != 0)
     {
         Console.WriteLine("Total Shards: {0}", searchResults.Shards.Total);
         Console.WriteLine("Total Successful: {0}", searchResults.Shards.Successful);
         Console.WriteLine("Total Failed: {0}", searchResults.Shards.Failed);
         Console.WriteLine("Total Failures: {0}", searchResults.Shards.Failures);
     }
 }
        protected override void ExpectResponse(ISearchResponse <Project> response)
        {
            /** === Handling Responses
             * Using the `.Agg` aggregation helper we can fetch our aggregation results easily
             * in the correct type. <<aggs-vs-aggregations, Be sure to read more about .Aggs vs .Aggregations>>
             */
            response.ShouldBeValid();

            var dateHistogram = response.Aggs.DateRange("projects_date_ranges");

            dateHistogram.Should().NotBeNull();
            dateHistogram.Buckets.Should().NotBeNull();

            /** We specified three ranges so we expect to have three of them in the response */
            dateHistogram.Buckets.Count.Should().Be(3);
            foreach (var item in dateHistogram.Buckets)
            {
                item.DocCount.Should().BeGreaterThan(0);
            }
        }