version: 9.0.5
released: true
generated: 2025-08-12T11:34:40.403028310Z
changelogs:
  - pr: 124918
    summary: Fix EQL double invoking listener
    area: EQL
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Prevent double invocation of EQL listener
      In some cases, the EQL listener could be resolved twice, potentially leading to unexpected behavior.
      [#124918](https://github.com/elastic/elasticsearch/pull/124918) updates the control flow to exit early and ensure the listener is only invoked once.
      :::
  - pr: 129282
    summary: "Fix query rewrite logic to preserve `boosts` and `queryName` for `match`, `knn`, and `sparse_vector` queries on semantic_text fields"
    area: Search
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Preserve `boost` and `queryName` for semantic queries
      Query rewrite logic dropped `boost` and `queryName` values for `match`, `knn`, and `sparse_vector` queries on `semantic_text` fields, causing query weighting and naming to be lost. [#129282](https://github.com/elastic/elasticsearch/pull/129282) resolves the issue so these values are now preserved correctly during query rewriting.
      :::
  - pr: 129745
    summary: "ESQL: Fix `mv_expand` inconsistent column order"
    area: ES|QL
    type: bug
    issues:
      - 129000
    entryOverride: |
      :::{dropdown} Fix `mv_expand` inconsistent column order
      The `mv_expand` command could return columns in a different order depending on query execution paths. Now, the new attribute generated by `mv_expand` preserves the original field positions in the output. [#129745](https://github.com/elastic/elasticsearch/pull/129745) (issue: [#129000](https://github.com/elastic/elasticsearch/issues/129000))
      :::
  - pr: 130279
    summary: Fix missing removal of query cancellation callback in QueryPhase
    area: Search
    type: bug
    issues:
      - 130071
    entryOverride: |
      :::{dropdown} Fix missing removal of query cancellation callback in QueryPhase
      A missing removal of a query cancellation callback caused unintended timeouts or cancellations in later search phases when `allow_partial_search_results` was enabled, which could lead to `ArrayIndexOutOfBoundsException` errors.
      [#130279](https://github.com/elastic/elasticsearch/pull/130279) resolves the issue and ensures predictable search execution. (issue: [#130071](https://github.com/elastic/elasticsearch/issues/130071))
      :::
  - pr: 131236
    summary: Correctly handling `download_database_on_pipeline_creation` within a pipeline processor within a default or final pipeline
    area: Ingest Node
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Correctly handle `download_database_on_pipeline_creation` in default or final pipelines
      A bug in the `download_database_on_pipeline_creation` setting caused geoip databases not to download when the geoip processor was referenced from a pipeline processor in a default or final pipeline.
      This resulted in documents being tagged with `_geoip_database_unavailable_GeoLite2-City.mmdb` instead of having geo data.
      [#131236](https://github.com/elastic/elasticsearch/pull/131236) resolves the issue and ensures geoip databases download correctly in this scenario.
      :::
  - pr: 131391
    summary: Fix bug in point in time response
    area: Search
    type: bug
    issues:
      - 131026
    entryOverride: |
      :::{dropdown} Correct shard status reporting in point-in-time responses
      The Open PIT API incorrectly swapped the skipped and failed shard counts when partial search results were allowed. This caused the API to report failed shards as skipped and vice versa. [#131391](https://github.com/elastic/elasticsearch/pull/131391) fixes the field mapping so shard status is reported accurately. (issue: [#131026](https://github.com/elastic/elasticsearch/issues/131026))
      :::
  - pr: 131426
    summary: Disallow remote enrich after lu join
    area: ES|QL
    type: bug
    issues:
      - 129372
    entryOverride: |
      :::{dropdown} Disallow remote `ENRICH` after `LOOKUP JOIN`
      Combining a `LOOKUP JOIN` with remote `ENRICH` could trigger a `ClassCastException` due to pipeline breaker interactions when limits or top-N queries were involved. [#131426](https://github.com/elastic/elasticsearch/pull/131426) adds a validation that forbids remote `ENRICH` after `LOOKUP JOIN`, preventing the runtime error. (issue: [#129372](https://github.com/elastic/elasticsearch/issues/129372))
      :::
  - pr: 131429
    summary: Prevent auto-sharding for data streams in LOOKUP index mode
    area: Data streams
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Disables auto-sharding for LOOKUP index mode
      Auto-sharding for data streams caused unsupported replica scaling when the index mode was set to `LOOKUP`.
      This happened because lookup mappers do not support scaling beyond one replica.
      [#131429](https://github.com/elastic/elasticsearch/pull/131429) resolves this issue by disabling auto-sharding for data streams with `LOOKUP` index modes, avoiding unsupported replica settings.
      :::
  - pr: 131630
    summary: Fix memory usage estimation for ELSER models
    area: Machine Learning
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Fix memory usage estimation for ELSER models
      Using the deployment ID instead of the model ID caused `isElserV1Or2Model` to fail for ELSER models, because deployment IDs don’t start with `.elser_model_2`.
      [#131630](https://github.com/elastic/elasticsearch/pull/131630) updates the code to pass the model ID, ensuring memory usage is estimated correctly.
      :::
  - pr: 131677
    summary: Throw better exception if verifying empty repo
    area: Snapshot/Restore
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Improve error handling when verifying an empty snapshot repository

      Verifying the integrity of a brand-new snapshot repository without any index blobs failed with a low-level error because the repository generation was `-1`, which cannot be sent over the wire. [#131677](https://github.com/elastic/elasticsearch/pull/131677) updates the logic to reject such requests early with a clearer, more helpful error message.
      :::
  - pr: 131680
    summary: Grant server module read/write entitlements for deprecated path setting "path.shared_data"
    area: Infra/Core
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Grants server module read/write permissions for deprecated `path.shared_data` setting
      The server module is now granted read/write permissions for the deprecated `path.shared_data` setting.
      [#131680](https://github.com/elastic/elasticsearch/pull/131680) resolves issues surfaced in internal testing and ensures compatibility with legacy configurations.
      :::
  - pr: 131711
    summary: Track & log when there is insufficient disk space available to execute merges
    area: Engine
    type: enhancement
    issues: []
  - pr: 131990
    summary: Prevent the trained model deployment memory estimation from double-counting allocations
    area: Machine Learning
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Prevents double-counting of allocations in trained model deployment memory estimation
      A recent refactor introduced a bug that caused the trained model memory estimation to double-count the number of allocations, leading to inflated memory usage projections.
      [#131990](https://github.com/elastic/elasticsearch/pull/131990) resolves the issue by reverting the change and restoring accurate memory estimation for trained model deployments.
      :::
  - pr: 132018
    summary: Fix decoding of non-ascii field names in ignored source
    area: Mapping
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Fixes decoding failure for non-ASCII field names in `_ignored_source`
      A decoding error occurred when field names in `_ignored_source` contained non-ASCII characters.
      This happened because `String.length()` was used to calculate the byte length of the field name, which only works correctly for ASCII characters.
      [#132018](https://github.com/elastic/elasticsearch/pull/132018) resolves the issue by using the actual byte array length of the encoded field name, ensuring proper decoding regardless of character encoding.
      :::
  - pr: 132101
    summary: Simulate ingest API uses existing index mapping when `mapping_addition` is given
    area: Ingest Node
    type: bug
    issues: []
    entryOverride: |
      :::{dropdown} Fixes incorrect mapping resolution in simulate ingest API when `mapping_addition` is provided
      When using the simulate ingest API with a `mapping_addition`, the system incorrectly ignored the existing mapping of the target index and instead applied the mapping from a matching index template, if one existed.
      This caused mismatches between the index and simulation behavior.
      [#132101](https://github.com/elastic/elasticsearch/pull/132101) resolves the issue and ensures that the index’s actual mapping is used when available, preserving consistency between simulation and execution.
      :::
  - pr: 132167
    summary: Deal with internally created IN in a different way for EQL
    area: EQL
    type: bug
    issues:
      - 118621
    entryOverride: |
      :::{dropdown} Resolves EQL parsing failure for IP-mapped fields in `OR` expressions
      Parsing EQL queries failed when comparing the same IP-mapped field to multiple values joined by an `OR` expression.
      This occurred because lookup operators were internally rewritten into `IN` expressions, which are unsupported for IP-type fields.
      [#132167](https://github.com/elastic/elasticsearch/pull/132167) resolves the issue and ensures EQL can now successfully parse and execute such or queries involving IP fields. (issue: [#118621](https://github.com/elastic/elasticsearch/issues/118621))
      :::
  - pr: 132260
    summary: FIx Driver creating status with a live list of operators
    area: ES|QL
    type: bug
    issues:
      - 131564
    entryOverride: |
      :::{dropdown} Fixes `ConcurrentModificationException` caused by live operator list
      A `ConcurrentModificationException` caused test failures in `CrossClusterAsyncEnrichStopIT.testEnrichAfterStop` under certain conditions.
      This happened because the ES|QL driver added a live operator list to the `DriverStatus` object, which could be modified while the status was being serialized.
      [#132260](https://github.com/elastic/elasticsearch/pull/132260) fixes the issue by copying the operator list before storing it, preventing concurrent changes during status reads.
      (issue: [#131564](https://github.com/elastic/elasticsearch/issues/131564))
      :::
  - pr: 132320
    summary: "Aggs: Add validation to Bucket script pipeline agg"
    area: Aggregations
    type: bug
    issues:
      - 132272
    entryOverride: |
      :::{dropdown} Validate parent aggregation type in `bucket_script`
      The `bucket_script` pipeline aggregation didn’t validate that its parent aggregation was a multi-bucket aggregation.
      This caused a `ClassCastException` at runtime when the parent was not multi-bucket.
      [#132320](https://github.com/elastic/elasticsearch/pull/132320) adds a validation step so the aggregation fails early, preventing the runtime error. (issue: [#132272](https://github.com/elastic/elasticsearch/issues/132272))
      :::
