private Task GetFetchDocumentsMethod(DocumentsModel documentsModel) { var q = new IndexQuery { Start = model.DocumentsResult.Value.Pager.Skip, PageSize = model.DocumentsResult.Value.Pager.PageSize, Query = query, }; if (model.SortBy != null && model.SortBy.Count > 0) { var sortedFields = new List<SortedField>(); foreach (var sortByRef in model.SortBy) { var sortBy = sortByRef.Value; if (sortBy.EndsWith(QueryModel.SortByDescSuffix)) { var field = sortBy.Remove(sortBy.Length - QueryModel.SortByDescSuffix.Length); sortedFields.Add(new SortedField(field) {Descending = true}); } else sortedFields.Add(new SortedField(sortBy)); } q.SortedFields = sortedFields.ToArray(); } if (model.IsSpatialQuerySupported) { q = new SpatialIndexQuery(q) { Latitude = model.Latitude.HasValue ? model.Latitude.Value : 0, Longitude = model.Longitude.HasValue ? model.Longitude.Value : 0, Radius = model.Radius.HasValue ? model.Radius.Value : 0, }; } return DatabaseCommands.QueryAsync(model.IndexName, q, null) .ContinueOnSuccessInTheUIThread(qr => { var viewableDocuments = qr.Results.Select(obj => new ViewableDocument(obj.ToJsonDocument())).ToArray(); documentsModel.Documents.Match(viewableDocuments); documentsModel.Pager.TotalResults.Value = qr.TotalResults; if (qr.TotalResults == 0) SuggestResults(); }) .Catch(ex => model.Error = ex.ExtractSingleInnerException().SimplifyError()); }
public IndexQuery CreateTemplateQuery() { var transformer = SelectedTransformer.Value; if (transformer == "None" || !UseTransformer) transformer = ""; var q = new IndexQuery { Query = Query, DefaultOperator = DefaultOperator, ResultsTransformer = transformer }; if (SortBy != null && SortBy.Count > 0) { var sortedFields = new List<SortedField>(); foreach (var sortByRef in SortBy) { var sortBy = sortByRef.Value; if (sortBy.EndsWith(QueryModel.SortByDescSuffix)) { var field = sortBy.Remove(sortBy.Length - QueryModel.SortByDescSuffix.Length); sortedFields.Add(new SortedField(field) { Descending = true }); } else sortedFields.Add(new SortedField(sortBy)); } q.SortedFields = sortedFields.ToArray(); } if (ShowFields) q.FieldsToFetch = new[] { Constants.AllFields }; q.DebugOptionGetIndexEntries = ShowEntries; q.SkipTransformResults = SkipTransformResults; if (IsSpatialQuerySupported && SpatialQuery.Y.HasValue && SpatialQuery.X.HasValue) { var radiusValue = SpatialQuery.Radius.HasValue ? SpatialQuery.Radius.Value : 1; q = new SpatialIndexQuery(q) { QueryShape = SpatialIndexQuery.GetQueryShapeFromLatLon(SpatialQuery.Y.Value, SpatialQuery.X.Value, radiusValue), SpatialRelation = SpatialRelation.Within, SpatialFieldName = SpatialQuery.FieldName, DefaultOperator = DefaultOperator, RadiusUnitOverride = SpatialQuery.RadiusUnits }; } return q; }
private Task GetFetchDocumentsMethod(DocumentsModel documentsModel) { var q = new IndexQuery { Start = model.DocumentsResult.Value.Pager.Skip, PageSize = model.DocumentsResult.Value.Pager.PageSize, Query = query, }; if (model.SortBy != null && model.SortBy.Count > 0) { var sortedFields = new List<SortedField>(); foreach (var sortByRef in model.SortBy) { var sortBy = sortByRef.Value; if (sortBy.EndsWith(QueryModel.SortByDescSuffix)) { var field = sortBy.Remove(sortBy.Length - QueryModel.SortByDescSuffix.Length); sortedFields.Add(new SortedField(field) {Descending = true}); } else sortedFields.Add(new SortedField(sortBy)); } q.SortedFields = sortedFields.ToArray(); } if (model.IsSpatialQuerySupported) { q = new SpatialIndexQuery(q) { Latitude = model.Latitude.HasValue ? model.Latitude.Value : 0, Longitude = model.Longitude.HasValue ? model.Longitude.Value : 0, Radius = model.Radius.HasValue ? model.Radius.Value : 0, }; } var queryStartTime = DateTime.Now.Ticks; var queryEndtime = DateTime.MinValue.Ticks; return DatabaseCommands.QueryAsync(model.IndexName, q, null) .ContinueWith(task => { queryEndtime = DateTime.Now.Ticks; return task; }) .Unwrap() .ContinueOnSuccessInTheUIThread(qr => { model.QueryTime = new TimeSpan(queryEndtime - queryStartTime); model.Results = new RavenQueryStatistics { IndexEtag = qr.IndexEtag, IndexName = qr.IndexName, IndexTimestamp = qr.IndexTimestamp, IsStale = qr.IsStale, SkippedResults = qr.SkippedResults, Timestamp = DateTime.Now, TotalResults = qr.TotalResults }; var viewableDocuments = qr.Results.Select(obj => new ViewableDocument(obj.ToJsonDocument())).ToArray(); var documetsIds = new List<string>(); ProjectionData.Projections.Clear(); foreach (var viewableDocument in viewableDocuments) { var id = string.IsNullOrEmpty(viewableDocument.Id) == false ? viewableDocument.Id : Guid.NewGuid().ToString(); if (string.IsNullOrEmpty(viewableDocument.Id)) ProjectionData.Projections.Add(id, viewableDocument); documetsIds.Add(id); viewableDocument.NeighborsIds = documetsIds; } documentsModel.Documents.Match(viewableDocuments); documentsModel.Pager.TotalResults.Value = qr.TotalResults; if (qr.TotalResults == 0) SuggestResults(); }) .CatchIgnore<WebException>(ex => model.Error = ex.SimplifyError()); }
public SpatialDistanceSortField(string field, bool reverse, SpatialIndexQuery qry) : base(field, CUSTOM, reverse) { var shape = SpatialIndex.ShapeReadWriter.ReadShape(qry.QueryShape); center = shape.GetCenter(); }
public SpatialDistanceSortField(string field, bool reverse, SpatialIndexQuery qry) : base(field, CUSTOM, reverse) { lat = qry.Latitude; lng = qry.Longitude; }
public IndexQuery CreateTemplateQuery() { var q = new IndexQuery { Query = Query, DefaultOperator = DefaultOperator }; if (SortBy != null && SortBy.Count > 0) { var sortedFields = new List<SortedField>(); foreach (var sortByRef in SortBy) { var sortBy = sortByRef.Value; if (sortBy.EndsWith(QueryModel.SortByDescSuffix)) { var field = sortBy.Remove(sortBy.Length - QueryModel.SortByDescSuffix.Length); sortedFields.Add(new SortedField(field) { Descending = true }); } else sortedFields.Add(new SortedField(sortBy)); } q.SortedFields = sortedFields.ToArray(); } if (ShowFields) q.FieldsToFetch = new[] { Constants.AllFields }; q.DebugOptionGetIndexEntries = ShowEntries; q.SkipTransformResults = SkipTransformResults; if (IsSpatialQuerySupported && Latitude.HasValue && Longitude.HasValue) { var radiusValue = Radius.HasValue ? Radius.Value : 1; if (RangeUnits == RangeUnits.Mile) radiusValue *= 1.60934; q = new SpatialIndexQuery(q) { QueryShape = SpatialIndexQuery.GetQueryShapeFromLatLon(Latitude.Value, Longitude.Value, radiusValue), SpatialRelation = SpatialRelation.Within, SpatialFieldName = Constants.DefaultSpatialFieldName, DefaultOperator = DefaultOperator }; } return q; }
public Query MakeQuery(Query existingQuery, SpatialStrategy spatialStrategy, SpatialIndexQuery spatialQuery) { return MakeQuery(existingQuery, spatialStrategy, spatialQuery.QueryShape, spatialQuery.SpatialRelation, spatialQuery.DistanceErrorPercentage, spatialQuery.RadiusUnitOverride); }