Skip to content

Releases: elastic/elasticsearch-net

9.5.3

Choose a tag to compare

@flobernd flobernd released this 28 Sep 11:06
beb9073

Warning

This release contains a breaking change in the generated security types. Review the Breaking entry below before upgrading.

What's Changed

  • Update Elastic.Transport to 1.1.0 by @flobernd in #8992
    • Records the Elastic-Cluster-Name response header (sent by Elasticsearch 9.6+ when http.headers.cluster_name.enabled is set) as the db.elasticsearch.cluster.name span attribute
    • Fixes a duplicate-key exception when ParseAllHeaders or an overlapping ResponseHeadersToParse was used while OpenTelemetry listeners were active
  • Fix routing inference for bulk update and delete operations by @fresh55 in #8995 Fixes #8978
    • Bulk update operations (including the fluent IdFrom path and script upserts) now infer routing from the document instead of omitting it
    • Bulk delete operations no longer emit "routing":null for types without a routing property, and Delete(doc) / DeleteMany(...) keep routing and _index inference
  • Avoid closure allocations in RoutingResolver by @fresh55 in #8979 Fixes #7664
    • RoutingResolver.Resolve() no longer allocates on any path (join-field routing drops from 160 B/op to 0 B/op)
  • Regenerate client by @flobernd in #9003 and #9005
    • Adds the Certificates (_ssl/certificates), Cluster.RemoteInfo, DanglingIndices.DeleteDanglingIndex / ImportDanglingIndex, Ilm.ExplainLifecycle, Indices.AddBlock and Ml.PreviewDatafeed endpoints
    • Adds the kql query to the Query DSL (Query.Kql / KqlQuery)
    • Adds the moving_avg pipeline aggregation (Aggregation.MovingAvg with EWMA, Holt, Holt-Winters, linear and simple models)
    • Adds the clone_api_key cluster privilege (ClusterPrivilege.CloneApiKey)
    • Adds MaxConsecutiveExtractionFailures to DatafeedConfig and the put/update datafeed requests, and AnalysisStats to DataframeAnalytics
    • Breaking GlobalPrivilege.Application is now optional (ApplicationGlobalUserPrivileges?) and the GlobalPrivilege(ApplicationGlobalUserPrivileges) constructor was removed. Use the object initializer or the GlobalPrivilegeDescriptor instead

Full Changelog: 9.5.2...9.5.3

8.19.27

Choose a tag to compare

@flobernd flobernd released this 28 Sep 11:04
c9f7ae5

What's Changed

  • Update Elastic.Transport to 1.1.0 by @flobernd in #8992
    • Records the Elastic-Cluster-Name response header (sent by Elasticsearch 9.6+ when http.headers.cluster_name.enabled is set) as the db.elasticsearch.cluster.name span attribute
    • Fixes a duplicate-key exception when ParseAllHeaders or an overlapping ResponseHeadersToParse was used while OpenTelemetry listeners were active
  • Fix routing inference for bulk update and delete operations by @fresh55 in #8995 Fixes #8978
    • Bulk update operations (including the fluent IdFrom path and script upserts) now infer routing from the document instead of omitting it
    • Bulk delete operations no longer emit "routing":null for types without a routing property, and Delete(doc) / DeleteMany(...) keep routing and _index inference
  • Avoid closure allocations in RoutingResolver by @fresh55 in #8979 Fixes #7664
    • RoutingResolver.Resolve() no longer allocates on any path (join-field routing drops from 160 B/op to 0 B/op)
  • Regenerate client by @flobernd in #9002 and #9006
    • Adds the Certificates (_ssl/certificates), Cluster.RemoteInfo, DanglingIndices.DeleteDanglingIndex / ImportDanglingIndex, Ilm.ExplainLifecycle, Indices.AddBlock and Ml.PreviewDatafeed endpoints
    • Adds the moving_avg pipeline aggregation (Aggregation.MovingAvg with EWMA, Holt, Holt-Winters, linear and simple models)
    • Adds MaxConsecutiveExtractionFailures to DatafeedConfig and the put/update datafeed requests
    • Adds AnalysisStats to DataframeAnalytics

Full Changelog: 8.19.26...8.19.27

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? 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> to KeyValuePair, 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>, Query becomes Union, and the Input(params string[]) overload is removed. EmbeddingContentObject.Content becomes ICollection 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, 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, 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 to ICollection, 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("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("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