Releases · elastic/elasticsearch-net · GitHub
Skip to content

Releases: elastic/elasticsearch-net

9.5.2

Choose a tag to compare

@flobernd flobernd released this 04 Sep 13:39
94033f1

Warning

This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.

What's Changed

  • Regenerate client by @flobernd in #8990
    • DenseVectorIndexOptions gains the bbq_disk properties AutoCalibrate, Bits, ClusterSize,
      DefaultVisitPercentage and Precondition.
    • DenseVectorIndexOptions.ConfidenceInterval is now marked [Obsolete] (deprecated since 9.5.0).
    • SourceFieldMode gains ColumnarStored (columnar_stored), so index templates and mappings that use the new mode
      no longer fail deserialization.
    • Breaking: InnerRetriever.Normalizer and InnerRetriever.Weight are now optional (ScoreNormalizer? and
      float? instead of required), following the spec change that made normalizer and weight optional on the linear
      retriever's inner retrievers. The [SetsRequiredMembers] constructor no longer takes normalizer and weight
      arguments.
    • Breaking: RoleDescriptor.Global, QueryRole.Global and RoleDescriptorRead.Global now use a single
      GlobalPrivilege instead of a collection, matching the server-side parser, which only accepts an object for the
      global privilege. The Global descriptor methods replace their params array overloads with a single-object
      overload.

Full Changelog: 9.5.1...9.5.2

8.19.26

Choose a tag to compare

@flobernd flobernd released this 04 Sep 13:38
11bd7a9

Warning

This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.

What's Changed

  • Regenerate client by @flobernd in #8989
    • Breaking: InnerRetriever.Normalizer and InnerRetriever.Weight are now optional (ScoreNormalizer? and
      float? instead of required), following the spec change that made normalizer and weight optional on the linear
      retriever's inner retrievers. The [SetsRequiredMembers] constructor no longer takes normalizer and weight
      arguments.
    • Breaking: RoleDescriptor.Global, QueryRole.Global and RoleDescriptorRead.Global now use a single
      GlobalPrivilege instead of a collection, matching the server-side parser, which only accepts an object for the
      global privilege. The Global descriptor methods replace their params array overloads with a single-object
      overload.

Full Changelog: 8.19.25...8.19.26

9.5.1

Choose a tag to compare

@flobernd flobernd released this 28 Aug 13:02
27b3d95

Warning

This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.

What's Changed

  • Regenerate client by @flobernd in #8957 and #8981
    • Transform destinations now accept aliases, each with an optional move_on_creation flag, through the new DestinationAlias type.
    • Request converter sources regenerated to emit the full client invocation.
    • Breaking: KnnRetriever.NumCandidates is now optional (int? instead of required int), following the spec change that made num_candidates optional on the kNN retriever. The [SetsRequiredMembers] constructor no longer takes a numCandidates argument.
    • Breaking: TransformSummary.Dest and UpdateTransformResponse.Dest now use Elastic.Clients.Elasticsearch.TransformManagement.Destination instead of Elastic.Clients.Elasticsearch.Core.Reindex.Destination.
  • Restore delegate caching in IdResolver by @fresh55 in #8973
    • The getter delegate was only cached when resolution failed, so it was rebuilt on every successful call.
    • 100k resolves of the same type improve from 64 ms / 55.2 MB to 3.5 ms / 40 bytes. Partially addresses (#7664).

Full Changelog: 9.5.0...9.5.1

8.19.25

Choose a tag to compare

@flobernd flobernd released this 28 Aug 13:02
35e2f9b

Warning

This release contains breaking changes in generated types. Please review the breaking changes listed below before upgrading.

What's Changed

  • Regenerate client by @flobernd in #8955 and #8982
    • Transform destinations now accept aliases, each with an optional move_on_creation flag, through the new DestinationAlias type.
    • Request converter sources regenerated to emit the full client invocation.
    • Breaking: KnnRetriever.NumCandidates is now optional (int? instead of required int), following the spec change that made num_candidates optional on the kNN retriever. The [SetsRequiredMembers] constructor no longer takes a numCandidates argument.
    • Breaking: TransformSummary.Dest and UpdateTransformResponse.Dest now use Elastic.Clients.Elasticsearch.TransformManagement.Destination instead of Elastic.Clients.Elasticsearch.Core.Reindex.Destination.
  • Restore delegate caching in IdResolver by @fresh55 in #8973
    • The getter delegate was only cached when resolution failed, so it was rebuilt on every successful call.
    • 100k resolves of the same type improve from 64 ms / 55.2 MB to 3.5 ms / 40 bytes. Partially addresses (#7664).

Full Changelog: 8.19.24...8.19.25

9.5.0

Choose a tag to compare

@flobernd flobernd released this 04 Aug 19:20
c4e7039

What's Changed

Initial 9.5.x release.

Warning

This release regenerates the client against the Elasticsearch 9.5 specification and contains breaking changes. Please review the list below before upgrading.

  • Regenerate client against the Elasticsearch 9.5 specification by @flobernd in #8930 and #8944
    • New experimental client.Encryption.Reset endpoint, plus a ProjectEncryptionKey indicator on the health report
    • New experimental ES|QL data federation APIs: PutDataSource / GetDataSource / DeleteDataSource and PutDataset / GetDataset / DeleteDataset, with the supporting ESQLDataSource, ESQLDataset and DatasetMapping types
    • New experimental Inference region policy APIs: PutRegionPolicy / GetRegionPolicy / DeleteRegionPolicy
    • New _slice routing parameter (RouteSlice) across the search, get, index, delete, update and bulk APIs, as well as on the multi-search header and the reindex destination
    • FrequentItemSets aggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expected frequent_item_sets, so the property always read back as null
    • Role-template queries in index privileges now deserialize to RoleTemplateQuery. Previously any object-shaped query was unconditionally read as a regular QueryDsl.Query
    • SpanGap and RoleMappingRule.Field variant accessors now return null instead of a default KeyValuePair when the union holds a different variant
    • New enum members: EmbeddingContentType.Audio / .Pdf / .Video, AnthropicTaskType.ChatCompletion, OpenAITaskType.Embedding, and the ClusterPrivilege.ManageReindex / .MonitorReindex values
    • Breaking (mapping): DocValues on 32 property types changes from bool? to Union<bool, DocValuesConfig>? to carry the new doc_values.multi_value setting. The parameterless DocValues() descriptor overload is gone, and reading the property into a bool? no longer compiles. SourceField.Compress and CompressThreshold are removed, and TextIndexPrefixes.MinChars / MaxChars become optional (int?), dropping the two-argument constructor
    • Breaking (ES|QL): the named-parameter arm of Params on EsqlQuery and AsyncQuery changes from KeyValuePair<string, ICollection<FieldValue>> to KeyValuePair<string, Union<ICollection<FieldValue>, ClassifiedNamedParameter>>, which affects every existing named-parameter call site. Both requests also gain a Settings body property
    • Breaking (inference): Rerank now accepts the expanded multimodal request format, so Input becomes Union<ICollection<string>, ICollection<RerankInputObject>>, Query becomes Union<string, RerankInputObject>, and the Input(params string[]) overload is removed. EmbeddingContentObject.Content becomes ICollection<EmbeddingContentObjectItem> and EmbeddingContentObjectContents is gone, OpenAIServiceSettings.ApiKey is now optional, and JinaAIServiceSettings.ElementType is renamed to EmbeddingType
    • Breaking (snapshot): SourceOnlyRepositorySettings is replaced by the ISourceOnlyRepositorySettings variant family with per-backend settings types, constructed through SourceOnlyRepositorySettingsFactory (ForAzure, ForGcs, ForReadOnlyUrl, ForS3, ForSharedFileSystem). SourceOnlyRepository.Settings now takes the interface, and its descriptor overloads are replaced by a factory callback
    • Breaking (security): RoleInfo.Indices changes from IndicesPrivileges to IndicesPrivilegesRead, and role definitions gain DataSourcePrivileges
    • Breaking (stats): GetStats.Time is renamed to GetTime, ShardStats.Indices becomes a dictionary of ShardStats, the DenseVectorOffHeapStats.TotalCenifSize typo is corrected to TotalCenivfSize, and newly required members change the positional constructors of IndexingStats, SearchStats, FlushStats, MappingStats and MachineLearning.Defaults
  • Make custom JSON converters safe for multi-segment readers by @flobernd in #8923
    • The hand-written date, duration, stringified and fractional numeric converters no longer fail when the Utf8JsonReader is constructed over a multi-segment ReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over a PipeReader
    • The existing single-segment typed deserialization path is unchanged

New Contributors

Full Changelog: 9.4.2...9.5.0

8.19.24

Choose a tag to compare

@flobernd flobernd released this 04 Aug 19:02
e7cdc30

What's Changed

Warning

This release regenerates the client against the latest specification and contains a few breaking changes. Please review the list below before upgrading.

  • Make custom JSON converters safe for multi-segment readers by @flobernd in #8923
    • The hand-written date, duration, stringified and fractional numeric converters no longer fail when the Utf8JsonReader is constructed over a multi-segment ReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over a PipeReader
    • The existing single-segment typed deserialization path is unchanged
  • Regenerate client by @flobernd in #8922 and #8945
    • FrequentItemSets aggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expected frequent_item_sets, so the property always read back as null
    • Role-template queries in index privileges now deserialize to RoleTemplateQuery. Previously the union had no discriminator between the two object arms, so any object-shaped query was unconditionally read as a regular QueryDsl.Query
    • SpanQuery.SpanGap now returns null instead of a default KeyValuePair when the union holds a different variant, so SpanGap is not null is no longer always true
    • New basic query parameter on GetTransformStats, which returns a cheaper subset of statistics by skipping operations_behind, changes_last_detected_at, last_search_time and the checkpoint timestamps
    • New settings and response fields: IndexSettings.Unassigned exposing index.unassigned.node_left.delayed_timeout, OnScriptError on runtime field definitions, and Allocations shard-allocation statistics on node stats
    • Breaking: TextIndexPrefixes.MinChars and MaxChars become optional (int?) and the two-argument TextIndexPrefixes(int, int) constructor is removed. This also fixes reading responses that omit either value, which previously failed the required-member check
    • Breaking: JinaAIServiceSettings.ElementType is renamed to EmbeddingType, matching the embedding_type wire name
    • Breaking: NodeInfoDiscover.SeedProviders changes from IReadOnlyCollection<string> to ICollection<string>, and a scalar seed_providers value from the node info API now deserializes instead of throwing

Full Changelog: 8.19.23...8.19.24

9.4.2

Choose a tag to compare

@flobernd flobernd released this 01 Jun 14:44
0d5c9b5

What's Changed

  • Add plugin-defined (non-exhaustive) variant registry by @flobernd in #8911
    • Unknown discriminators on variant union families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, etc.) now deserialize into an Unknown* carrier and re-serialize losslessly — no data is dropped for plugin-defined or future variants the client doesn't model
    • Opt into strong typing by registering a CLR type for a discriminator: settings.Variants.Register<IProperty, MyPluginProperty>("my_plugin"); registrations are scoped per client instance and AOT-safe — see the Plugin-defined variant types documentation for details
  • Regenerate client by @flobernd in #8908 and #8917
    • Generated Unknown* carrier types for all variant families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, suggesters, rescorers) to support the non-exhaustive variant registry
    • Improved XML documentation coverage across generated client methods, request/response types, and type members that previously had no IntelliSense descriptions

Full Changelog: 9.4.1...9.4.2

8.19.23

Choose a tag to compare

@flobernd flobernd released this 01 Jun 14:43
691ee74

What's Changed

  • Add plugin-defined (non-exhaustive) variant registry by @flobernd in #8911
    • Unknown discriminators on variant union families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, etc.) now deserialize into an Unknown* carrier and re-serialize losslessly — no data is dropped for plugin-defined or future variants the client doesn't model
    • Opt into strong typing by registering a CLR type for a discriminator: settings.Variants.Register<IProperty, MyPluginProperty>("my_plugin"); registrations are scoped per client instance and AOT-safe — see the Plugin-defined variant types documentation for details
  • Regenerate client by @flobernd in #8910 and #8916
    • Generated Unknown* carrier types for all variant families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, suggesters, rescorers) to support the non-exhaustive variant registry
    • Improved XML documentation coverage across generated client methods, request/response types, and type members that previously had no IntelliSense descriptions

Full Changelog: 8.19.22...8.19.23

9.4.1

Choose a tag to compare

@flobernd flobernd released this 21 May 21:22
5ec2d95

What's Changed

  • Regenerate client by @flobernd in #8899 and #8907
    • Fixes (de-)serialization of unions with three or more variants — previously, hand-rolled union converters could fail to select the correct variant
    • Search response shape fix in InnerHits: the Fields property is split into Field (single-field selector using Fields) and a new Fields collection of FieldAndFormat — existing usages of InnerHits.Fields = … may need to be retargeted to Field
    • DataStreamLifecycle gains EffectiveRetention and RetentionDeterminedBy; new GlobalRetention and RetentionSource types; GetDataLifecycleResponse now exposes GlobalRetention
    • Reindex rethrottle response now models parent task progress via the new ParentReindexStatus type
    • Inference and _mvt content-type alignment: chat_completion_unified / stream_completion send Content-Type: application/json; _mvt uses the versioned application/vnd.elasticsearch+vnd.mapbox-vector-tile Accept header

Full Changelog: 9.4.0...9.4.1

8.19.22

Choose a tag to compare

@flobernd flobernd released this 21 May 21:22
e8ff071

What's Changed

  • Regenerate client by @flobernd in #8897 and #8906
    • Fixes (de-)serialization of unions with three or more variants — previously, hand-rolled union converters could fail to select the correct variant
    • DataStreamLifecycle gains EffectiveRetention and RetentionDeterminedBy; new GlobalRetention and RetentionSource types; GetDataLifecycleResponse now exposes GlobalRetention
    • Inference and _mvt content-type alignment: chat_completion_unified / stream_completion send Content-Type: application/json; _mvt uses the versioned application/vnd.elasticsearch+vnd.mapbox-vector-tile Accept header

Full Changelog: 8.19.21...8.19.22