private bool WriteDecay(JsonWriter writer, IDecayFunction decay, JsonSerializer serializer) { if (decay == null) return false; writer.WritePropertyName(decay.DecayType); writer.WriteStartObject(); { writer.WritePropertyName(serializer.GetConnectionSettings().Inferrer.Field(decay.Field)); writer.WriteStartObject(); { var write = WriteNumericDecay(writer, decay as IDecayFunction<double?, double?>, serializer) || WriteDateDecay(writer, decay as IDecayFunction<DateMath, Time>, serializer) || WriteGeoDecay(writer, decay as IDecayFunction<GeoLocation, Distance>, serializer); if (!write) throw new Exception($"Can not write decay function json for {decay.GetType().Name}"); if (decay.Decay.HasValue) { writer.WritePropertyName("decay"); serializer.Serialize(writer, decay.Decay.Value); } } writer.WriteEndObject(); if (decay.MultiValueMode.HasValue) { writer.WritePropertyName("multi_value_mode"); serializer.Serialize(writer, decay.MultiValueMode.Value); } } writer.WriteEndObject(); return true; }
private bool WriteNumericDecay(JsonWriter writer, IDecayFunction <double?, double?> value, JsonSerializer serializer) { if (value == null) { return(false); } writer.WritePropertyName("origin"); serializer.Serialize(writer, value.Origin); writer.WritePropertyName("scale"); serializer.Serialize(writer, value.Scale); if (value.Offset != null) { writer.WritePropertyName("offset"); serializer.Serialize(writer, value.Offset); } return(true); }
private bool WriteGeoDecay(JsonWriter writer, IDecayFunction <GeoLocation, Distance> value, JsonSerializer serializer) { if (value == null || value.Field.IsConditionless()) { return(false); } writer.WritePropertyName("origin"); serializer.Serialize(writer, value.Origin); writer.WritePropertyName("scale"); serializer.Serialize(writer, value.Scale); if (value.Offset != null) { writer.WritePropertyName("offset"); serializer.Serialize(writer, value.Offset); } return(true); }
private bool WriteDateDecay(JsonWriter writer, IDecayFunction <DateMath, TimeUnitExpression> value, JsonSerializer serializer) { if (value == null || value.Field.IsConditionless()) { return(false); } writer.WritePropertyName("origin"); serializer.Serialize(writer, value.Origin); writer.WritePropertyName("scale"); serializer.Serialize(writer, value.Scale); if (value.Offset != null) { writer.WritePropertyName("offset"); serializer.Serialize(writer, value.Offset); } return(true); }
private static void WriteDateDecay(ref JsonWriter writer, ref bool written, IDecayFunction <DateMath, Time> value, IJsonFormatterResolver formatterResolver ) { if (value == null || value.Field.IsConditionless()) { return; } if (value.Origin != null) { writer.WritePropertyName("origin"); var dateMathFormatter = formatterResolver.GetFormatter <DateMath>(); dateMathFormatter.Serialize(ref writer, value.Origin, formatterResolver); written = true; } if (written) { writer.WriteValueSeparator(); } writer.WritePropertyName("scale"); var timeFormatter = formatterResolver.GetFormatter <Time>(); timeFormatter.Serialize(ref writer, value.Scale, formatterResolver); written = true; if (value.Offset != null) { writer.WriteValueSeparator(); writer.WritePropertyName("offset"); timeFormatter.Serialize(ref writer, value.Offset, formatterResolver); } }
private bool WriteDecay(JsonWriter writer, IDecayFunction decay, JsonSerializer serializer) { if (decay == null) { return(false); } writer.WritePropertyName(decay.DecayType); writer.WriteStartObject(); { writer.WritePropertyName(serializer.GetConnectionSettings().Inferrer.Field(decay.Field)); writer.WriteStartObject(); { var write = WriteNumericDecay(writer, decay as IDecayFunction <double?, double?>, serializer) || WriteDateDecay(writer, decay as IDecayFunction <DateMath, Time>, serializer) || WriteGeoDecay(writer, decay as IDecayFunction <GeoLocation, Distance>, serializer); if (!write) { throw new Exception($"Can not write decay function json for {decay.GetType().Name}"); } if (decay.Decay.HasValue) { writer.WritePropertyName("decay"); serializer.Serialize(writer, decay.Decay.Value); } } writer.WriteEndObject(); if (decay.MultiValueMode.HasValue) { writer.WritePropertyName("multi_value_mode"); serializer.Serialize(writer, decay.MultiValueMode.Value); } } writer.WriteEndObject(); return(true); }
private static void WriteNumericDecay(ref JsonWriter writer, ref bool written, IDecayFunction <double?, double?> value) { if (value.Origin.HasValue) { writer.WritePropertyName("origin"); writer.WriteDouble(value.Origin.Value); written = true; } if (value.Scale.HasValue) { if (written) { writer.WriteValueSeparator(); } writer.WritePropertyName("scale"); writer.WriteDouble(value.Scale.Value); written = true; } if (value.Offset != null) { if (written) { writer.WriteValueSeparator(); } writer.WritePropertyName("offset"); writer.WriteDouble(value.Offset.Value); } }
public IScoreFunction Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) { QueryContainer filter = null; double? weight = null; IScoreFunction function = null; var count = 0; while (reader.ReadIsInObject(ref count)) { var propertyName = reader.ReadPropertyNameSegmentRaw(); if (AutomataDictionary.TryGetValue(propertyName, out var value)) { switch (value) { case 0: var formatter = formatterResolver.GetFormatter <QueryContainer>(); filter = formatter.Deserialize(ref reader, formatterResolver); break; case 1: weight = reader.ReadDouble(); break; case 2: var innerCount = 0; MultiValueMode?multiValueMode = null; IDecayFunction decayFunction = null; while (reader.ReadIsInObject(ref innerCount)) { var functionPropertyName = reader.ReadPropertyName(); if (functionPropertyName == "multi_value_mode") { multiValueMode = formatterResolver.GetFormatter <MultiValueMode>() .Deserialize(ref reader, formatterResolver); } else { var name = propertyName.Utf8String(); decayFunction = ReadDecayFunction(ref reader, name, formatterResolver); decayFunction.Field = functionPropertyName; } } if (decayFunction != null) { decayFunction.MultiValueMode = multiValueMode; function = decayFunction; } break; case 3: var randomScoreFormatter = formatterResolver.GetFormatter <RandomScoreFunction>(); function = randomScoreFormatter.Deserialize(ref reader, formatterResolver); break; case 4: var fieldValueFormatter = formatterResolver.GetFormatter <FieldValueFactorFunction>(); function = fieldValueFormatter.Deserialize(ref reader, formatterResolver); break; case 5: var scriptFormatter = formatterResolver.GetFormatter <ScriptScoreFunction>(); function = scriptFormatter.Deserialize(ref reader, formatterResolver); break; } } } if (function == null) { if (weight.HasValue) { function = new WeightFunction(); } else { return(null); } } function.Weight = weight; function.Filter = filter; return(function); }
private bool WriteGeoDecay(JsonWriter writer, IDecayFunction<GeoLocation, Distance> value, JsonSerializer serializer) { if (value == null || value.Field.IsConditionless()) return false; writer.WritePropertyName("origin"); serializer.Serialize(writer, value.Origin); writer.WritePropertyName("scale"); serializer.Serialize(writer, value.Scale); if (value.Offset != null) { writer.WritePropertyName("offset"); serializer.Serialize(writer, value.Offset); } return true; }
private bool WriteNumericDecay(JsonWriter writer, IDecayFunction<double?, double?> value, JsonSerializer serializer) { if (value == null) return false; writer.WritePropertyName("origin"); serializer.Serialize(writer, value.Origin); writer.WritePropertyName("scale"); serializer.Serialize(writer, value.Scale); if (value.Offset != null) { writer.WritePropertyName("offset"); serializer.Serialize(writer, value.Offset); } return true; }