コード例 #1
0
		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());
		}
コード例 #2
0
ファイル: QueryModel.cs プロジェクト: 925coder/ravendb
	    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;
        }
コード例 #3
0
		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());
		}
コード例 #4
0
		public SpatialDistanceSortField(string field, bool reverse, SpatialIndexQuery qry)
			: base(field, CUSTOM, reverse)
		{
			var shape = SpatialIndex.ShapeReadWriter.ReadShape(qry.QueryShape);
			center = shape.GetCenter();
		}
コード例 #5
0
		public SpatialDistanceSortField(string field, bool reverse, SpatialIndexQuery qry) : base(field, CUSTOM, reverse)
		{
			lat = qry.Latitude;
			lng = qry.Longitude;
		}
コード例 #6
0
ファイル: QueryModel.cs プロジェクト: samueldjack/ravendb
	    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;
        }
コード例 #7
0
ファイル: SpatialField.cs プロジェクト: 925coder/ravendb
		public Query MakeQuery(Query existingQuery, SpatialStrategy spatialStrategy, SpatialIndexQuery spatialQuery)
		{
			return MakeQuery(existingQuery, spatialStrategy, spatialQuery.QueryShape, spatialQuery.SpatialRelation, spatialQuery.DistanceErrorPercentage, spatialQuery.RadiusUnitOverride);
		}