go-elasticsearch v9.3.5 - BulkIndexer Routing Param Fix

   |   3 minute read   |   Using 493 words

Elastic released go-elasticsearch v9.3.5 on June 22, 2026. This is a focused patch for esutil.BulkIndexer: it stops sending an empty routing query param when no routing value is set. If you are checking what changed in go-elasticsearch v9.3.5, this release is about bulk indexing request correctness, not a broad client update.

The full release notes and downloads are on the GitHub release page.

Empty routing in BulkIndexer

The only user visible change in v9.3.5 is a bug fix in esutil.BulkIndexer. Before this patch, BulkIndexer could include a routing query parameter even when the routing value was empty. The release notes describe the fix as omitting the empty routing query param in BulkIndexer.

That sounds small because it is small. It is still worth taking if bulk indexing is part of the write path. Request parameters are part of the API contract. Sending a parameter with an empty value is not the same thing as not sending the parameter at all, especially for code that depends on exact request shape or proxies that inspect query strings.

The cited issue is #1514, and the implementation commit is f9640f0. There are no other fixes, features, or dependency changes listed in the release notes.

Why this matters for bulk indexing

Bulk indexing code usually sits in boring but important places. It runs in import jobs, event pipelines, background workers, and service paths that push batches into Elasticsearch. Small request differences can become annoying when they show up in logs, request signing, caching layers, or custom middleware.

For applications that never use routing, this patch makes BulkIndexer match caller intent more closely. No routing value means no routing query param. That is the cleaner behavior. It also keeps generated requests easier to compare in tests, because an empty query field is no longer present just because the client went through BulkIndexer.

For applications that do use routing, the release notes do not describe any change to populated routing values. The fix is scoped to the empty case. If a caller sets routing deliberately, this release does not claim to alter that path.

Small patch, narrow scope

The v9.3.5 release is not a prerelease. It is a regular patch release for the Go client. The notes do not mention breaking changes, migration steps, new APIs, or configuration changes.

That narrow scope is useful information by itself. Operators do not need to hunt for a hidden upgrade story in this release. The practical check is whether a service uses esutil.BulkIndexer, and whether tests or logs currently show empty routing query params in bulk requests.

If the project pins exact versions, this is the kind of patch that can go through the normal client update path. Run the existing bulk indexing tests, check request snapshots if the codebase has them, and watch the first deploy for write errors. There is no release note evidence of a wider behavior change.

Where to get it



denis256 at denis256.dev