public static void WriteMetadata(this BlittableJsonTextWriter writer, Document document, BlittableJsonReaderObject metadata) { writer.WritePropertyName(Constants.Documents.Metadata.Key); writer.WriteStartObject(); bool first = true; if (metadata != null) { var size = metadata.Count; var prop = new BlittableJsonReaderObject.PropertyDetails(); for (int i = 0; i < size; i++) { if (first == false) { writer.WriteComma(); } first = false; metadata.GetPropertyByIndex(i, ref prop); writer.WritePropertyName(prop.Name); writer.WriteValue(prop.Token & BlittableJsonReaderBase.TypesMask, prop.Value); } } if (first == false) { writer.WriteComma(); } writer.WritePropertyName(Constants.Documents.Metadata.ChangeVector); writer.WriteString(document.ChangeVector); if (document.Flags != DocumentFlags.None) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.Flags); writer.WriteString(document.Flags.ToString()); } if (document.Id != null) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.Id); writer.WriteString(document.Id); } if (document.IndexScore != null) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.IndexScore); writer.WriteDouble(document.IndexScore.Value); } if (document.LastModified != DateTime.MinValue) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.LastModified); writer.WriteDateTime(document.LastModified, isUtc: true); } writer.WriteEndObject(); }
public static void WriteSuggestionQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, SuggestionQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.IndexName)); writer.WriteString(query.IndexName); writer.WriteComma(); if (query.Popularity) { writer.WritePropertyName(nameof(query.Popularity)); writer.WriteBool(query.Popularity); writer.WriteComma(); } if (query.Accuracy.HasValue) { writer.WritePropertyName(nameof(query.Accuracy)); writer.WriteDouble(query.Accuracy.Value); writer.WriteComma(); } if (query.Distance.HasValue) { writer.WritePropertyName(nameof(query.Distance)); writer.WriteString(query.Distance.Value.ToString()); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Field) == false) { writer.WritePropertyName(nameof(query.Field)); writer.WriteString(query.Field); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Term) == false) { writer.WritePropertyName(nameof(query.Term)); writer.WriteString(query.Term); writer.WriteComma(); } writer.WritePropertyName(nameof(query.MaxSuggestions)); writer.WriteInteger(query.MaxSuggestions); writer.WriteEndObject(); }
public static string ConvertResultToString(ScriptRunnerResult result) { var ms = new MemoryStream(); using (var ctx = JsonOperationContext.ShortTermSingleUse()) using (var writer = new BlittableJsonTextWriter(ctx, ms)) { writer.WriteStartObject(); writer.WritePropertyName("Result"); if (result.IsNull) { writer.WriteNull(); } else if (result.RawJsValue.IsBoolean()) { writer.WriteBool(result.RawJsValue.AsBoolean()); } else if (result.RawJsValue.IsString()) { writer.WriteString(result.RawJsValue.AsString()); } else if (result.RawJsValue.IsDate()) { var date = result.RawJsValue.AsDate(); writer.WriteString(date.ToDateTime().ToString("O")); } else if (result.RawJsValue.IsNumber()) { writer.WriteDouble(result.RawJsValue.AsNumber()); } else { writer.WriteObject(result.TranslateToObject(ctx)); } writer.WriteEndObject(); writer.Flush(); } var str = Encoding.UTF8.GetString(ms.ToArray()); return(str); }
private static void WriteIndexFieldOptions(this BlittableJsonTextWriter writer, JsonOperationContext context, IndexFieldOptions options, bool removeAnalyzers) { writer.WriteStartObject(); writer.WritePropertyName(nameof(options.Analyzer)); if (string.IsNullOrWhiteSpace(options.Analyzer) == false && !removeAnalyzers) { writer.WriteString(options.Analyzer); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Indexing)); if (options.Indexing.HasValue) { writer.WriteString(options.Indexing.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Storage)); if (options.Storage.HasValue) { writer.WriteString(options.Storage.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Suggestions)); if (options.Suggestions.HasValue) { writer.WriteBool(options.Suggestions.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.TermVector)); if (options.TermVector.HasValue) { writer.WriteString(options.TermVector.ToString()); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial)); if (options.Spatial != null) { writer.WriteStartObject(); writer.WritePropertyName(nameof(options.Spatial.Type)); writer.WriteString(options.Spatial.Type.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxTreeLevel)); writer.WriteInteger(options.Spatial.MaxTreeLevel); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxX)); LazyStringValue lazyStringValue; using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MaxX))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MaxY)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MaxY))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MinX)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MinX))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.MinY)); using (lazyStringValue = context.GetLazyString(CharExtensions.ToInvariantString(options.Spatial.MinY))) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.Strategy)); writer.WriteString(options.Spatial.Strategy.ToString()); writer.WriteComma(); writer.WritePropertyName(nameof(options.Spatial.Units)); writer.WriteString(options.Spatial.Units.ToString()); writer.WriteEndObject(); } else { writer.WriteNull(); } writer.WriteEndObject(); }
public static void WriteFacetResult(this BlittableJsonTextWriter writer, JsonOperationContext context, FacetResult result) { writer.WriteStartObject(); writer.WritePropertyName(nameof(result.RemainingHits)); writer.WriteInteger(result.RemainingHits); writer.WriteComma(); writer.WritePropertyName(nameof(result.RemainingTermsCount)); writer.WriteInteger(result.RemainingTermsCount); writer.WriteComma(); writer.WritePropertyName(nameof(result.RemainingTerms)); writer.WriteStartArray(); var isFirstInternal = true; foreach (var term in result.RemainingTerms) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WriteString(term); } writer.WriteEndArray(); writer.WriteComma(); writer.WritePropertyName(nameof(result.Values)); writer.WriteStartArray(); isFirstInternal = true; foreach (var value in result.Values) { if (isFirstInternal == false) { writer.WriteComma(); } isFirstInternal = false; writer.WriteStartObject(); writer.WritePropertyName(nameof(value.Average)); if (value.Average.HasValue) { using (var lazyStringValue = context.GetLazyString(value.Average.ToInvariantString())) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(value.Count)); if (value.Count.HasValue) { writer.WriteInteger(value.Count.Value); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(value.Hits)); writer.WriteInteger(value.Hits); writer.WriteComma(); writer.WritePropertyName(nameof(value.Max)); if (value.Max.HasValue) { using (var lazyStringValue = context.GetLazyString(value.Max.ToInvariantString())) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(value.Min)); if (value.Min.HasValue) { using (var lazyStringValue = context.GetLazyString(value.Min.ToInvariantString())) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); } else { writer.WriteNull(); } writer.WriteComma(); writer.WritePropertyName(nameof(value.Range)); writer.WriteString(value.Range); writer.WriteComma(); writer.WritePropertyName(nameof(value.Sum)); if (value.Sum.HasValue) { using (var lazyStringValue = context.GetLazyString(value.Sum.ToInvariantString())) writer.WriteDouble(new LazyNumberValue(lazyStringValue)); } else { writer.WriteNull(); } writer.WriteEndObject(); } writer.WriteEndArray(); writer.WriteEndObject(); }
private static void WriteMetadata(BlittableJsonTextWriter writer, Document document, BlittableJsonReaderObject metadata, Func <LazyStringValue, bool> filterMetadataProperty = null) { writer.WritePropertyName(Constants.Documents.Metadata.Key); writer.WriteStartObject(); bool first = true; if (metadata != null) { var size = metadata.Count; var prop = new BlittableJsonReaderObject.PropertyDetails(); for (int i = 0; i < size; i++) { metadata.GetPropertyByIndex(i, ref prop); if (filterMetadataProperty != null && filterMetadataProperty(prop.Name)) { continue; } if (first == false) { writer.WriteComma(); } first = false; writer.WritePropertyName((string)prop.Name); writer.WriteValue(prop.Token & BlittableJsonReaderBase.TypesMask, prop.Value); } } if (first == false) { writer.WriteComma(); } writer.WritePropertyName(Constants.Documents.Metadata.ChangeVector); writer.WriteString(document.ChangeVector); if (document.Flags != DocumentFlags.None) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.Flags); writer.WriteString(document.Flags.ToString()); } if (document.Id != null) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.Id); writer.WriteString(document.Id); } if (document.IndexScore != null) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.IndexScore); writer.WriteDouble(document.IndexScore.Value); } if (document.Distance != null) { writer.WriteComma(); var result = document.Distance.Value; writer.WritePropertyName(Constants.Documents.Metadata.SpatialResult); writer.WriteStartObject(); writer.WritePropertyName(nameof(result.Distance)); writer.WriteDouble(result.Distance); writer.WriteComma(); writer.WritePropertyName(nameof(result.Latitude)); writer.WriteDouble(result.Latitude); writer.WriteComma(); writer.WritePropertyName(nameof(result.Longitude)); writer.WriteDouble(result.Longitude); writer.WriteEndObject(); } if (document.LastModified != DateTime.MinValue) { writer.WriteComma(); writer.WritePropertyName(Constants.Documents.Metadata.LastModified); writer.WriteDateTime(document.LastModified, isUtc: true); } writer.WriteEndObject(); }
public static void WriteMoreLikeThisQuery(this BlittableJsonTextWriter writer, DocumentConventions conventions, JsonOperationContext context, MoreLikeThisQuery query) { writer.WriteStartObject(); writer.WritePropertyName(nameof(query.DocumentId)); writer.WriteString(query.DocumentId); writer.WriteComma(); if (query.PageSizeSet && query.PageSize >= 0) { writer.WritePropertyName(nameof(query.PageSize)); writer.WriteInteger(query.PageSize); writer.WriteComma(); } if (query.Boost.HasValue) { writer.WritePropertyName(nameof(query.Boost)); writer.WriteBool(query.Boost.Value); writer.WriteComma(); } if (query.BoostFactor.HasValue) { writer.WritePropertyName(nameof(query.BoostFactor)); writer.WriteDouble(query.BoostFactor.Value); writer.WriteComma(); } if (string.IsNullOrEmpty(query.StopWordsDocumentId) == false) { writer.WritePropertyName(nameof(query.StopWordsDocumentId)); writer.WriteString(query.StopWordsDocumentId); writer.WriteComma(); } if (query.Fields != null && query.Fields.Length > 0) { writer.WriteArray(nameof(query.Fields), query.Fields); writer.WriteComma(); } if (query.Includes != null && query.Includes.Length > 0) { writer.WriteArray(nameof(query.Includes), query.Includes); writer.WriteComma(); } if (query.MaximumDocumentFrequency.HasValue) { writer.WritePropertyName(nameof(query.MaximumDocumentFrequency)); writer.WriteInteger(query.MaximumDocumentFrequency.Value); writer.WriteComma(); } if (query.MaximumDocumentFrequencyPercentage.HasValue) { writer.WritePropertyName(nameof(query.MaximumDocumentFrequencyPercentage)); writer.WriteInteger(query.MaximumDocumentFrequencyPercentage.Value); writer.WriteComma(); } if (query.MaximumNumberOfTokensParsed.HasValue) { writer.WritePropertyName(nameof(query.MaximumNumberOfTokensParsed)); writer.WriteInteger(query.MaximumNumberOfTokensParsed.Value); writer.WriteComma(); } if (query.MaximumQueryTerms.HasValue) { writer.WritePropertyName(nameof(query.MaximumQueryTerms)); writer.WriteInteger(query.MaximumQueryTerms.Value); writer.WriteComma(); } if (query.MaximumWordLength.HasValue) { writer.WritePropertyName(nameof(query.MaximumWordLength)); writer.WriteInteger(query.MaximumWordLength.Value); writer.WriteComma(); } if (query.MinimumDocumentFrequency.HasValue) { writer.WritePropertyName(nameof(query.MinimumDocumentFrequency)); writer.WriteInteger(query.MinimumDocumentFrequency.Value); writer.WriteComma(); } if (query.MinimumTermFrequency.HasValue) { writer.WritePropertyName(nameof(query.MinimumTermFrequency)); writer.WriteInteger(query.MinimumTermFrequency.Value); writer.WriteComma(); } if (query.MinimumWordLength.HasValue) { writer.WritePropertyName(nameof(query.MinimumWordLength)); writer.WriteInteger(query.MinimumWordLength.Value); writer.WriteComma(); } if (string.IsNullOrEmpty(query.Document) == false) { writer.WritePropertyName(nameof(query.Document)); writer.WriteString(query.Document); writer.WriteComma(); } writer.WritePropertyName(nameof(query.Query)); writer.WriteString(query.Query); writer.WriteEndObject(); }