From 581f1cb6c08fb6db3c22e0b89f1aa15295f96573 Mon Sep 17 00:00:00 2001 From: Florian Bernd Date: Fri, 28 Jul 2023 16:35:11 +0200 Subject: [PATCH] Fix `TextExpansionQuery` definition --- .../Types/QueryDsl/TextExpansionQuery.g.cs | 200 +++++++++++++----- 1 file changed, 145 insertions(+), 55 deletions(-) diff --git a/src/Elastic.Clients.Elasticsearch/_Generated/Types/QueryDsl/TextExpansionQuery.g.cs b/src/Elastic.Clients.Elasticsearch/_Generated/Types/QueryDsl/TextExpansionQuery.g.cs index dc03762fe93..c7748608f21 100644 --- a/src/Elastic.Clients.Elasticsearch/_Generated/Types/QueryDsl/TextExpansionQuery.g.cs +++ b/src/Elastic.Clients.Elasticsearch/_Generated/Types/QueryDsl/TextExpansionQuery.g.cs @@ -27,30 +27,108 @@ namespace Elastic.Clients.Elasticsearch.QueryDsl; +internal sealed partial class TextExpansionQueryConverter : JsonConverter +{ + public override TextExpansionQuery Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartObject) + throw new JsonException("Unexpected JSON detected."); + reader.Read(); + var fieldName = reader.GetString(); + reader.Read(); + var variant = new TextExpansionQuery(fieldName); + while (reader.Read() && reader.TokenType != JsonTokenType.EndObject) + { + if (reader.TokenType == JsonTokenType.PropertyName) + { + var property = reader.GetString(); + if (property == "_name") + { + variant.QueryName = JsonSerializer.Deserialize(ref reader, options); + continue; + } + + if (property == "boost") + { + variant.Boost = JsonSerializer.Deserialize(ref reader, options); + continue; + } + + if (property == "model_id") + { + variant.ModelId = JsonSerializer.Deserialize(ref reader, options); + continue; + } + + if (property == "model_text") + { + variant.ModelText = JsonSerializer.Deserialize(ref reader, options); + continue; + } + } + } + + reader.Read(); + return variant; + } + + public override void Write(Utf8JsonWriter writer, TextExpansionQuery value, JsonSerializerOptions options) + { + if (value.Field is null) + throw new JsonException("Unable to serialize TextExpansionQuery because the `Field` property is not set. Field name queries must include a valid field name."); + if (options.TryGetClientSettings(out var settings)) + { + writer.WriteStartObject(); + writer.WritePropertyName(settings.Inferrer.Field(value.Field)); + writer.WriteStartObject(); + if (!string.IsNullOrEmpty(value.QueryName)) + { + writer.WritePropertyName("_name"); + writer.WriteStringValue(value.QueryName); + } + + if (value.Boost.HasValue) + { + writer.WritePropertyName("boost"); + writer.WriteNumberValue(value.Boost.Value); + } + + writer.WritePropertyName("model_id"); + writer.WriteStringValue(value.ModelId); + writer.WritePropertyName("model_text"); + writer.WriteStringValue(value.ModelText); + writer.WriteEndObject(); + writer.WriteEndObject(); + return; + } + + throw new JsonException("Unable to retrieve client settings required to infer field."); + } +} + +[JsonConverter(typeof(TextExpansionQueryConverter))] public sealed partial class TextExpansionQuery : SearchQuery { - [JsonInclude, JsonPropertyName("_name")] + public TextExpansionQuery(Field field) + { + if (field is null) + throw new ArgumentNullException(nameof(field)); + Field = field; + } + public string? QueryName { get; set; } - [JsonInclude, JsonPropertyName("boost")] public float? Boost { get; set; } /// /// The text expansion NLP model to use /// - [JsonInclude, JsonPropertyName("model_id")] public string ModelId { get; set; } /// /// The query text /// - [JsonInclude, JsonPropertyName("model_text")] public string ModelText { get; set; } - - /// - /// The name of the rank features field to search against - /// - [JsonInclude, JsonPropertyName("value")] - public Elastic.Clients.Elasticsearch.Field Value { get; set; } + public Elastic.Clients.Elasticsearch.Field Field { get; set; } public static implicit operator Query(TextExpansionQuery textExpansionQuery) => QueryDsl.Query.TextExpansion(textExpansionQuery); @@ -61,15 +139,29 @@ public sealed partial class TextExpansionQueryDescriptor : Serializab { internal TextExpansionQueryDescriptor(Action> configure) => configure.Invoke(this); - public TextExpansionQueryDescriptor() : base() + internal TextExpansionQueryDescriptor() : base() + { + } + + public TextExpansionQueryDescriptor(Field field) + { + if (field is null) + throw new ArgumentNullException(nameof(field)); + FieldValue = field; + } + + public TextExpansionQueryDescriptor(Expression> field) { + if (field is null) + throw new ArgumentNullException(nameof(field)); + FieldValue = field; } private string? QueryNameValue { get; set; } private float? BoostValue { get; set; } + private Elastic.Clients.Elasticsearch.Field FieldValue { get; set; } private string ModelIdValue { get; set; } private string ModelTextValue { get; set; } - private Elastic.Clients.Elasticsearch.Field ValueValue { get; set; } public TextExpansionQueryDescriptor QueryName(string? queryName) { @@ -83,44 +175,42 @@ public TextExpansionQueryDescriptor Boost(float? boost) return Self; } - /// - /// The text expansion NLP model to use - /// - public TextExpansionQueryDescriptor ModelId(string modelId) + public TextExpansionQueryDescriptor Field(Elastic.Clients.Elasticsearch.Field field) { - ModelIdValue = modelId; + FieldValue = field; return Self; } - /// - /// The query text - /// - public TextExpansionQueryDescriptor ModelText(string modelText) + public TextExpansionQueryDescriptor Field(Expression> field) { - ModelTextValue = modelText; + FieldValue = field; return Self; } /// - /// The name of the rank features field to search against + /// The text expansion NLP model to use /// - public TextExpansionQueryDescriptor Value(Elastic.Clients.Elasticsearch.Field value) + public TextExpansionQueryDescriptor ModelId(string modelId) { - ValueValue = value; + ModelIdValue = modelId; return Self; } /// - /// The name of the rank features field to search against + /// The query text /// - public TextExpansionQueryDescriptor Value(Expression> value) + public TextExpansionQueryDescriptor ModelText(string modelText) { - ValueValue = value; + ModelTextValue = modelText; return Self; } protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings) { + if (FieldValue is null) + throw new JsonException("Unable to serialize field name query descriptor with a null field. Ensure you use a suitable descriptor constructor or call the Field method, passing a non-null value for the field argument."); + writer.WriteStartObject(); + writer.WritePropertyName(settings.Inferrer.Field(FieldValue)); writer.WriteStartObject(); if (!string.IsNullOrEmpty(QueryNameValue)) { @@ -138,8 +228,7 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o writer.WriteStringValue(ModelIdValue); writer.WritePropertyName("model_text"); writer.WriteStringValue(ModelTextValue); - writer.WritePropertyName("value"); - JsonSerializer.Serialize(writer, ValueValue, options); + writer.WriteEndObject(); writer.WriteEndObject(); } } @@ -148,15 +237,22 @@ public sealed partial class TextExpansionQueryDescriptor : SerializableDescripto { internal TextExpansionQueryDescriptor(Action configure) => configure.Invoke(this); - public TextExpansionQueryDescriptor() : base() + internal TextExpansionQueryDescriptor() : base() + { + } + + public TextExpansionQueryDescriptor(Field field) { + if (field is null) + throw new ArgumentNullException(nameof(field)); + FieldValue = field; } private string? QueryNameValue { get; set; } private float? BoostValue { get; set; } + private Elastic.Clients.Elasticsearch.Field FieldValue { get; set; } private string ModelIdValue { get; set; } private string ModelTextValue { get; set; } - private Elastic.Clients.Elasticsearch.Field ValueValue { get; set; } public TextExpansionQueryDescriptor QueryName(string? queryName) { @@ -170,53 +266,48 @@ public TextExpansionQueryDescriptor Boost(float? boost) return Self; } - /// - /// The text expansion NLP model to use - /// - public TextExpansionQueryDescriptor ModelId(string modelId) + public TextExpansionQueryDescriptor Field(Elastic.Clients.Elasticsearch.Field field) { - ModelIdValue = modelId; + FieldValue = field; return Self; } - /// - /// The query text - /// - public TextExpansionQueryDescriptor ModelText(string modelText) + public TextExpansionQueryDescriptor Field(Expression> field) { - ModelTextValue = modelText; + FieldValue = field; return Self; } - /// - /// The name of the rank features field to search against - /// - public TextExpansionQueryDescriptor Value(Elastic.Clients.Elasticsearch.Field value) + public TextExpansionQueryDescriptor Field(Expression> field) { - ValueValue = value; + FieldValue = field; return Self; } /// - /// The name of the rank features field to search against + /// The text expansion NLP model to use /// - public TextExpansionQueryDescriptor Value(Expression> value) + public TextExpansionQueryDescriptor ModelId(string modelId) { - ValueValue = value; + ModelIdValue = modelId; return Self; } /// - /// The name of the rank features field to search against + /// The query text /// - public TextExpansionQueryDescriptor Value(Expression> value) + public TextExpansionQueryDescriptor ModelText(string modelText) { - ValueValue = value; + ModelTextValue = modelText; return Self; } protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions options, IElasticsearchClientSettings settings) { + if (FieldValue is null) + throw new JsonException("Unable to serialize field name query descriptor with a null field. Ensure you use a suitable descriptor constructor or call the Field method, passing a non-null value for the field argument."); + writer.WriteStartObject(); + writer.WritePropertyName(settings.Inferrer.Field(FieldValue)); writer.WriteStartObject(); if (!string.IsNullOrEmpty(QueryNameValue)) { @@ -234,8 +325,7 @@ protected override void Serialize(Utf8JsonWriter writer, JsonSerializerOptions o writer.WriteStringValue(ModelIdValue); writer.WritePropertyName("model_text"); writer.WriteStringValue(ModelTextValue); - writer.WritePropertyName("value"); - JsonSerializer.Serialize(writer, ValueValue, options); + writer.WriteEndObject(); writer.WriteEndObject(); } } \ No newline at end of file