Example #1
0
        private static AggregationResponse GetRangeAggregation(RangeAggregationRequest rangeAggregationRequest, FacetResults facets)
        {
            AggregationResponse result = null;

            if (rangeAggregationRequest != null)
            {
                var azureFieldName = AzureSearchHelper.ToAzureFieldName(rangeAggregationRequest.FieldName);
                if (!string.IsNullOrEmpty(azureFieldName))
                {
                    var facetResults = facets.ContainsKey(azureFieldName) ? facets[azureFieldName] : null;

                    if (facetResults != null && facetResults.Any())
                    {
                        result = new AggregationResponse
                        {
                            Id     = (rangeAggregationRequest.Id ?? rangeAggregationRequest.FieldName).ToLowerInvariant(),
                            Values = new List <AggregationResponseValue>(),
                        };

                        foreach (var value in rangeAggregationRequest.Values)
                        {
                            var facetResult = GetRangeFacetResult(value, facetResults);
                            AddAggregationValue(result, facetResult, value.Id);
                        }
                    }
                }
            }

            return(result);
        }
Example #2
0
        protected virtual SearchDocument ConvertToProviderDocument(IndexDocument document, IList <Field> providerFields, string documentType)
        {
            var result = new SearchDocument {
                Id = document.Id
            };

            document.Fields.Insert(0, new IndexDocumentField(AzureSearchHelper.RawKeyFieldName, document.Id)
            {
                IsRetrievable = true, IsFilterable = true
            });

            foreach (var field in document.Fields.OrderBy(f => f.Name))
            {
                var fieldName = AzureSearchHelper.ToAzureFieldName(field.Name);

                if (result.ContainsKey(fieldName))
                {
                    var newValues = new List <object>();

                    var currentValue = result[fieldName];

                    if (currentValue is object[] currentValues)
                    {
                        newValues.AddRange(currentValues);
                    }
                    else
                    {
                        newValues.Add(currentValue);
                    }

                    newValues.AddRange(field.Values);
                    result[fieldName] = newValues.ToArray();
                }
                else
                {
                    var providerField = AddProviderField(documentType, providerFields, fieldName, field);
                    var isCollection  = providerField.Type.ToString().StartsWith("Collection(");

                    var point = field.Value as GeoPoint;
                    var value = point != null
                        ? (isCollection ? field.Values.Select(v => ((GeoPoint)v).ToDocumentValue()).ToArray() : point.ToDocumentValue())
                        : (isCollection ? field.Values : field.Value);

                    result.Add(fieldName, value);
                }
            }

            return(result);
        }
Example #3
0
        private static AggregationResponse GetTermAggregation(TermAggregationRequest termAggregationRequest, FacetResults facets)
        {
            AggregationResponse result = null;

            if (termAggregationRequest != null)
            {
                var azureFieldName = AzureSearchHelper.ToAzureFieldName(termAggregationRequest.FieldName);
                if (!string.IsNullOrEmpty(azureFieldName))
                {
                    var facetResults = facets.ContainsKey(azureFieldName) ? facets[azureFieldName] : null;

                    if (facetResults != null && facetResults.Any())
                    {
                        result = new AggregationResponse
                        {
                            Id     = (termAggregationRequest.Id ?? termAggregationRequest.FieldName).ToLowerInvariant(),
                            Values = new List <AggregationResponseValue>(),
                        };

                        var values = termAggregationRequest.Values;

                        if (values != null)
                        {
                            foreach (var value in values)
                            {
                                var facetResult = facetResults.FirstOrDefault(r => r.Value.ToStringInvariant().EqualsInvariant(value));
                                AddAggregationValue(result, facetResult, value);
                            }
                        }
                        else
                        {
                            // Return all facet results if values are not defined
                            foreach (var facetResult in facetResults)
                            {
                                var aggregationValue = new AggregationResponseValue
                                {
                                    Id    = facetResult.Value.ToStringInvariant(),
                                    Count = facetResult.Count ?? 0,
                                };
                                result.Values.Add(aggregationValue);
                            }
                        }
                    }
                }
            }

            return(result);
        }