Releases: elastic/elasticsearch-net
Release list
9.5.2
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
DenseVectorIndexOptionsgains thebbq_diskpropertiesAutoCalibrate,Bits,ClusterSize,
DefaultVisitPercentageandPrecondition.DenseVectorIndexOptions.ConfidenceIntervalis now marked[Obsolete](deprecated since 9.5.0).SourceFieldModegainsColumnarStored(columnar_stored), so index templates and mappings that use the new mode
no longer fail deserialization.- Breaking:
InnerRetriever.NormalizerandInnerRetriever.Weightare now optional (ScoreNormalizer?and
float?instead ofrequired), following the spec change that madenormalizerandweightoptional on the linear
retriever's inner retrievers. The[SetsRequiredMembers]constructor no longer takesnormalizerandweight
arguments. - Breaking:
RoleDescriptor.Global,QueryRole.GlobalandRoleDescriptorRead.Globalnow use a single
GlobalPrivilegeinstead of a collection, matching the server-side parser, which only accepts an object for the
globalprivilege. TheGlobaldescriptor methods replace theirparamsarray overloads with a single-object
overload.
Full Changelog: 9.5.1...9.5.2
8.19.26
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.NormalizerandInnerRetriever.Weightare now optional (ScoreNormalizer?and
float?instead ofrequired), following the spec change that madenormalizerandweightoptional on the linear
retriever's inner retrievers. The[SetsRequiredMembers]constructor no longer takesnormalizerandweight
arguments. - Breaking:
RoleDescriptor.Global,QueryRole.GlobalandRoleDescriptorRead.Globalnow use a single
GlobalPrivilegeinstead of a collection, matching the server-side parser, which only accepts an object for the
globalprivilege. TheGlobaldescriptor methods replace theirparamsarray overloads with a single-object
overload.
- Breaking:
Full Changelog: 8.19.25...8.19.26
9.5.1
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 optionalmove_on_creationflag, through the newDestinationAliastype. - Request converter sources regenerated to emit the full client invocation.
- Breaking:
KnnRetriever.NumCandidatesis now optional (int?instead ofrequired int), following the spec change that madenum_candidatesoptional on the kNN retriever. The[SetsRequiredMembers]constructor no longer takes anumCandidatesargument. - Breaking:
TransformSummary.DestandUpdateTransformResponse.Destnow useElastic.Clients.Elasticsearch.TransformManagement.Destinationinstead ofElastic.Clients.Elasticsearch.Core.Reindex.Destination.
- Transform destinations now accept
- 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
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 optionalmove_on_creationflag, through the newDestinationAliastype. - Request converter sources regenerated to emit the full client invocation.
- Breaking:
KnnRetriever.NumCandidatesis now optional (int?instead ofrequired int), following the spec change that madenum_candidatesoptional on the kNN retriever. The[SetsRequiredMembers]constructor no longer takes anumCandidatesargument. - Breaking:
TransformSummary.DestandUpdateTransformResponse.Destnow useElastic.Clients.Elasticsearch.TransformManagement.Destinationinstead ofElastic.Clients.Elasticsearch.Core.Reindex.Destination.
- Transform destinations now accept
- 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
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.Resetendpoint, plus aProjectEncryptionKeyindicator on the health report - New experimental ES|QL data federation APIs:
PutDataSource/GetDataSource/DeleteDataSourceandPutDataset/GetDataset/DeleteDataset, with the supportingESQLDataSource,ESQLDatasetandDatasetMappingtypes - New experimental Inference region policy APIs:
PutRegionPolicy/GetRegionPolicy/DeleteRegionPolicy - New
_slicerouting parameter (RouteSlice) across the search, get, index, delete, update and bulk APIs, as well as on the multi-search header and the reindex destination FrequentItemSetsaggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expectedfrequent_item_sets, so the property always read back asnull- Role-template queries in index privileges now deserialize to
RoleTemplateQuery. Previously any object-shaped query was unconditionally read as a regularQueryDsl.Query SpanGapandRoleMappingRule.Fieldvariant accessors now returnnullinstead of a defaultKeyValuePairwhen the union holds a different variant- New enum members:
EmbeddingContentType.Audio/.Pdf/.Video,AnthropicTaskType.ChatCompletion,OpenAITaskType.Embedding, and theClusterPrivilege.ManageReindex/.MonitorReindexvalues - Breaking (mapping):
DocValueson 32 property types changes frombool?toUnion<bool, DocValuesConfig>?to carry the newdoc_values.multi_valuesetting. The parameterlessDocValues()descriptor overload is gone, and reading the property into abool?no longer compiles.SourceField.CompressandCompressThresholdare removed, andTextIndexPrefixes.MinChars/MaxCharsbecome optional (int?), dropping the two-argument constructor - Breaking (ES|QL): the named-parameter arm of
ParamsonEsqlQueryandAsyncQuerychanges fromKeyValuePair<string, ICollection<FieldValue>>toKeyValuePair<string, Union<ICollection<FieldValue>, ClassifiedNamedParameter>>, which affects every existing named-parameter call site. Both requests also gain aSettingsbody property - Breaking (inference):
Reranknow accepts the expanded multimodal request format, soInputbecomesUnion<ICollection<string>, ICollection<RerankInputObject>>,QuerybecomesUnion<string, RerankInputObject>, and theInput(params string[])overload is removed.EmbeddingContentObject.ContentbecomesICollection<EmbeddingContentObjectItem>andEmbeddingContentObjectContentsis gone,OpenAIServiceSettings.ApiKeyis now optional, andJinaAIServiceSettings.ElementTypeis renamed toEmbeddingType - Breaking (snapshot):
SourceOnlyRepositorySettingsis replaced by theISourceOnlyRepositorySettingsvariant family with per-backend settings types, constructed throughSourceOnlyRepositorySettingsFactory(ForAzure,ForGcs,ForReadOnlyUrl,ForS3,ForSharedFileSystem).SourceOnlyRepository.Settingsnow takes the interface, and its descriptor overloads are replaced by a factory callback - Breaking (security):
RoleInfo.Indiceschanges fromIndicesPrivilegestoIndicesPrivilegesRead, and role definitions gainDataSourcePrivileges - Breaking (stats):
GetStats.Timeis renamed toGetTime,ShardStats.Indicesbecomes a dictionary ofShardStats, theDenseVectorOffHeapStats.TotalCenifSizetypo is corrected toTotalCenivfSize, and newly required members change the positional constructors ofIndexingStats,SearchStats,FlushStats,MappingStatsandMachineLearning.Defaults
- New experimental
- 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
Utf8JsonReaderis constructed over a multi-segmentReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over aPipeReader - The existing single-segment typed deserialization path is unchanged
- The hand-written date, duration, stringified and fractional numeric converters no longer fail when the
New Contributors
- @charlotte-hoblik made their first contribution in #8901
Full Changelog: 9.4.2...9.5.0
8.19.24
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
Utf8JsonReaderis constructed over a multi-segmentReadOnlySequence<byte>, which unblocks sequence-based deserializers such as a streaming reader over aPipeReader - The existing single-segment typed deserialization path is unchanged
- The hand-written date, duration, stringified and fractional numeric converters no longer fail when the
- Regenerate client by @flobernd in #8922 and #8945
FrequentItemSetsaggregations now round-trip correctly. The generated variant used an empty discriminator where the converter expectedfrequent_item_sets, so the property always read back asnull- 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 regularQueryDsl.Query SpanQuery.SpanGapnow returnsnullinstead of a defaultKeyValuePairwhen the union holds a different variant, soSpanGap is not nullis no longer always true- New
basicquery parameter onGetTransformStats, which returns a cheaper subset of statistics by skippingoperations_behind,changes_last_detected_at,last_search_timeand the checkpoint timestamps - New settings and response fields:
IndexSettings.Unassignedexposingindex.unassigned.node_left.delayed_timeout,OnScriptErroron runtime field definitions, andAllocationsshard-allocation statistics on node stats - Breaking:
TextIndexPrefixes.MinCharsandMaxCharsbecome optional (int?) and the two-argumentTextIndexPrefixes(int, int)constructor is removed. This also fixes reading responses that omit either value, which previously failed the required-member check - Breaking:
JinaAIServiceSettings.ElementTypeis renamed toEmbeddingType, matching theembedding_typewire name - Breaking:
NodeInfoDiscover.SeedProviderschanges fromIReadOnlyCollection<string>toICollection<string>, and a scalarseed_providersvalue from the node info API now deserializes instead of throwing
Full Changelog: 8.19.23...8.19.24
9.4.2
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
- Unknown discriminators on variant union families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, etc.) now deserialize into an
- 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
- Generated
Full Changelog: 9.4.1...9.4.2
8.19.23
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
- Unknown discriminators on variant union families (properties, analyzers, char filters, token filters, tokenizers, repositories, similarity settings, aggregations, queries, etc.) now deserialize into an
- 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
- Generated
Full Changelog: 8.19.22...8.19.23
9.4.1
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: theFieldsproperty is split intoField(single-field selector usingFields) and a newFieldscollection ofFieldAndFormat— existing usages ofInnerHits.Fields = …may need to be retargeted toField DataStreamLifecyclegainsEffectiveRetentionandRetentionDeterminedBy; newGlobalRetentionandRetentionSourcetypes;GetDataLifecycleResponsenow exposesGlobalRetention- Reindex rethrottle response now models parent task progress via the new
ParentReindexStatustype - Inference and
_mvtcontent-type alignment:chat_completion_unified/stream_completionsendContent-Type: application/json;_mvtuses the versionedapplication/vnd.elasticsearch+vnd.mapbox-vector-tileAccept header
Full Changelog: 9.4.0...9.4.1
8.19.22
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
DataStreamLifecyclegainsEffectiveRetentionandRetentionDeterminedBy; newGlobalRetentionandRetentionSourcetypes;GetDataLifecycleResponsenow exposesGlobalRetention- Inference and
_mvtcontent-type alignment:chat_completion_unified/stream_completionsendContent-Type: application/json;_mvtuses the versionedapplication/vnd.elasticsearch+vnd.mapbox-vector-tileAccept header
Full Changelog: 8.19.21...8.19.22